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-scriptsopen in new window查阅。

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和devDependencies

  • npm i --production:仅安装dependencies

  • npm i [module] [-S/-D] [-g]:安装指定[module]到此目录下的node_modules,-S/-D表示并记录到package.json,-g表示是否安装到全局

  • npm uninstall [module] [-g]:卸载指定[module]