深入浅出NPM

package.json 解读

主要是核心的几个容易忽略的字段

1. bin

主要用于npm i -g 时候可以将脚本添加到可执行路径中,之后可以在命令行中直接执行。例如npm i -g fis3后就可以全局使用fis命令。

2. main

require()在引入包时候,优先检查这个字段,并将其作为模块的入口。如果不存在该字段,require()会查找包目录下的inde.js index.node index.json作为默认入口。

3. dependencies 与 devDependencies

  • dependencies 当前包所需要的依赖包列表,NPM会通过这个属性自动加载依赖的包
  • devDependencies 开发时候性需要的依赖,例如 mocha

4. scripts 脚本说明对象

可配置各种自定义脚本。通过npm run 执行定义的脚本。

1
2
3
4
5
"scripts": {
"test": "mocha ./test/index.js -t 10000",
"dev": "env DEBUG=true node app.js",
"start": "pm2 start process.json",
},

NPM

借助NPM,Node与第三方模块形成了一个生态系统。

全局安装模式

命令: npm i -g fis3

全局模式并不是将一个模块安装为全局包的意思,并不意味从任何地方通过require()来引用到。

本质:将一个包安装为全局可用的可执行命令通过软链接将bin字段配置的可执行文件链接到Node的可执行目录下。

例如,我的Node按照目录为/Users/baidu/.nvm/versions/node/v4.1.1/bin (通过which node查找)。那么全局模块安装模块目录为

path.resolve(process.execPath, '..', '..', 'lib', 'node_modules');

即为 '/Users/baidu/.nvm/versions/node/v4.1.1/lib/node_modules'.这个目录就是Node可执行目录。 从bin目录可以看到,fekey命令之所以全局可执行就是因为有了如下软链:

fis3 -> ../lib/node_modules/fis3/bin/fis.js

如何安装NPM包

官网渠道一般比较慢,我们可以指定镜像源。国内比较好的就是淘宝的镜像。

npm i --registry=https://registry.npm.taobao.rog

如果想默认使用淘宝镜像源按照,可以设置默认源:

// set
npm config set registry https://registry.npm.taobao.rog

// get 查看是否设置成功
npm get registry

这里以后所有的npm i都会走淘宝的源进行按照,非常稳定。

如何发布NPM包

1. 初始化包描述文件

npm init

2. 注册包仓库帐号

npm adduser

3. 上传包

npm publish

4. 包权限管理

多人开发需要

npm owner ls <package name>
npm owner add/rm <user> <package name>