coconilu/Blog

配置 NPM

Opened this issue · 0 comments

概述

与NPM配置相关的,有下面几个文件:

  1. .npmrc
  2. package.json
  3. package-lock.json
  4. package-locks
  5. shrinkwrap.json

.npmrc

.npmrc文件,就是npm的配置文件所在位置。通过这个文件可以查看一些npm元信息,比如包的缓存目录、全局或本地node包的存放位置等等。

相关的指令有:

npm config list
npm config set <key> <value>
npm config get [<key>]
npm config delete <key>
npm config list [--json]
npm config edit
npm set <key> <value>
npm get [<key>]

配置项请参考:Npm config list 字段

package.json

该文件用于描述当前库的信息,包括名字、作者、描述、依赖等等。

package.json中最重要的属性是name和version两个属性,这两个属性是必须要有的,否则模块就无法被安装,这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时,模块版本也应该一起变化。

name,名称
version,版本
description,描述
keywords,关键字
homepage,主页
bugs,bug提交地址或者邮箱
license,协议
author,作者
contributors,贡献者
email,作者邮箱
url,作者主页
files,项目包含的文件和文件夹,也可以通过`.npmignore`文件来配置
main,入口文件
browser,如果模块是用在浏览器端,那么应该适用browser字段而不是main字段
bin,可执行模块
man,仅适用linux系统
directories,描述模块结构
repository,代码存放地址
scripts,脚本
config,存放配置,可以通过process.env.npm_package_config_{key}来访问值
dependencies,依赖
devDependencies,开发时依赖
peerDependencies,同伴依赖
bundledDependencies,捆绑依赖
optionalDependencies,可选依赖
engines,指定工作的node版本
os,指定运行的操作系统,支持黑名单和白名单
cpu,指定运行的cpu架构
private,设置为私有库,防止意外发布
publishConfig,一些在发布包时需要的设置

版本号相关

  1. >、>=、<、<=,顾名思义
  2. ~,大约等于
  3. ^,兼容版本
  4. *,匹配任意版本
  5. x,表示任意数字
  6. version1 - version2,表示区间,等同>=version1 <=version2
  7. tag,常用的有latest
  8. URL
  9. Git URL
  10. GitHub URL

peerDependencies

通常是在插件开发的场景下,你的插件需要某些依赖的支持,但是你又没必要去安装,因为插件的宿主会去安装这些依赖,你就可以用peerDependencies去声明一下需要依赖的插件和版本,如果出问题npm就会有警告来提醒使用者去解决版本冲突问题。

bin指定指令

如果包是安装在本地的话,package.json文件里的scripts字段可以识别./node_modules/.bin路径下的指令;如果包是安装在全局的话,包里的bin字段对应的脚本会映射到系统PATH路径上——所以可以在终端执行这些脚本指令。

因为指令npm link可以把本地开发的包安装到全局上,所以我们可以很方便测试自己写的指令。

npm unlink可以注销掉之前安装到全局的本地包。

指令可以通过process.argv获取终端传入的命令行参数,它是一个数组。

package-lock.json和shrinkwrap.json

这两个文件作用一样,除了一点,当发布一个包的时候shrinkwrap.json会被包含在里面。

package-locks

这包括npm install,npm rm,npm update等为了防止这种更新情况发生,你可以使用--no-save选项,防止一起保存,或 --no-shrinkwrap允许package.json同时使被更新 package-lock.json或npm-shrinkwrap.json完整。

参考

npm 中文文档
npm-folders
npm的package.json字段含义中文文档
peerDependencies介绍及简析
浅谈node.js命令行工具
npm package.json属性详解