NPM
package.json
module & main
main指向此包被外部导入时的入口文件,cjs格式;module是esm格式的入口文件。
scripts
scripts: {
"foo": "node bin/foo.js --hot"
}
在包根目录可通过npm run foo
来快捷执行script中test指向的命令node bin/foo.js --hot
,在foo.js
中可用process.argvs读取到命令行参数--hot
。
scripts中有些特定脚本会在时机满足时自动运行,比如postinstall
脚本会自动运行于npm install
完成后。特定脚本可在官网npm-scripts查阅。
bin
一些npm包能以可执行文件的方式去运行,比如webpack、create-react-app等。
要使包能以可执行文件形式调用,需要配置package.json里的bin字段。
举个例子:
比如要创建一个叫my-bin的公共npm包,初始化my-bin项目,在项目中创建一个可执行文件/bin/cli.js
,并在package.json中配置bin字段,发布到npm。
cli.js
中的文件首行应加上#!/usr/bin/env node
表示该脚本以node环境运行
// my-bin 的 package.json
bin: {
"my-bin": "bin/cli.js"
}
用户在自己项目执行npm i my-bin
后,npm会将之前的cli.js
复制到项目根目录下的/node_module/.bin
,并重命名为my-bin
;如果执行全局安装npm i -g my-bin
,则会将其安装到全局的node目录下。
用户可以在项目根目录打开命令行手动调用
$ ./node_module/.bin/my-bin
来执行my-bin,也可以写在package.json的script中来调用(script里不必写出my-bin的完整路径,因为npm run test
时已经把./node_module/.bin
添加到环境依赖了)
// 用户项目 的 package.json
scripts: {
"test": "my-bin"
}
如果是全局安装,node已经默认把全局目录下的bin写进环境依赖了,直接在命令行里
$ my-bin
就能调用。
npm install
npm i
:安装package.json中所有dependencies和devDependenciesnpm i --production
:仅安装dependenciesnpm i [module] [-S/-D] [-g]
:安装指定[module]到此目录下的node_modules,-S/-D表示并记录到package.json,-g表示是否安装到全局npm uninstall [module] [-g]
:卸载指定[module]