npm 必知必会点
曾几何时,俺认识的npm
就是 npm install
npm run dev
一把嗦,然后……,就没有然后了。奈何被隔壁老王秀了一波骚操作,俺当时的内心感受。。。
“😯 草,什么鬼,还能这么玩!!!”
“牛掰”
“666”
陷入沉思……
前言
这是走进 Node.js 系列基础篇,了解你常使用的 npm。
npm是 Node.js 默认包管理器,其目标是自动化依赖和包管理器,前端工程化的成功离不开 npm 的支撑。
安装
首先需要安装 Node.js,NPM 依赖 于 Node.js 环境,所以第一步,需要配置 Node.js 环境。建议使用 nvm
、nvs
等版本管理器管理 Node.js 版本
npm 必知必会点
语义版本
npm 的版本号管理遵循语义化版本 [major, minor, patch]
(主版本号.次版本号.修订号)
主版本号:一般是新增不兼容 API 修改
次版本号:向下兼容的功能性新增,功能迭代
修订号:补丁或需紧急修复 API 问题
其次,在package.json
中常会看到版本号前有个符号
^
: 表示安装最新次版本号。规则有:^1.2.3
范围是:>=1.2.3
<2.0.0-0
的版本^0.2.3
的范围是: >=0.2.3
<0.3.0-0
^0.0.3
的范围是:>=0.0.3
<0.0.4-0
~
:表示安装最新的修订版本号。规则有:~1.2.3
范围是: >=1.2.3
<1.3.0-0
~1.2
范围是: >=1.2.0
<1.3.0-0
~1
范围是:>=1.0.0
<2.0.0-0
~0.2.3
范围是: >=0.2.3
<0.3.0-0
更详细的 SemVer 规范semver.org
package.json
一个 package.json 文件包含有
项目的所有依赖列表
项目的版本号等信息
package.json 字段比较多,但有 2 个是必要的字段
name: 包名称。小写的一个单词,可以使用连接符号和下划线
version: 字段值必须遵循版本语义版本控制指南
dependencies
vs devDependencies
前者是生产环境所需依赖,后者是本地开发所需依赖,npm install xxx --save
安装依赖到 dependencies
下,npm install xxx --save-dev
安装依赖到 devDependencies
下
详细了解 scirpt 的使用https://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
package-lock.json
如上文讲到,npm 包中采用的语义化版本管理,导致安装依赖时,可能会出现依赖版本不一致的问题。
package-lock.json
的目的就是让所有的使用环境在安装依赖时,都能实现百分百的依赖版本号一致, package-lock.json
生成 node_modules 树大致的文件结构:
name:同 package.json 的 name 一样
version:同 package.json 的 version 一样
lockfileVersion:从 1 开始的整数版本号,npm v7 后,此数值为 2 开始
packages:package.json 的键值对象
dependencies:node_modules 的所有依赖包列表
字段列表表示
version:版本号,具体的版本号
resolved:依赖包的下载地址
integrity:hash 值,用于完整性验证
requires:依赖包的 dependencies (并不是所有的子依赖都有 dependencies 属性,只有子依赖的依赖和当前已安装在根目录的 node_modules 中的依赖冲突之后,才会有这个属性)
.npmrc
npm 的配置文件
npm 从命令行、环境变量和.npmrc
文件获取配置设置。 读取配置的优先级顺序为:项目配置文件 > 电脑不同登录用户配置文件 > 电脑全局配置文件 > npm 内置配置文件
常见的配置项
npm install
npm install
命令执行后,会读取配置,优先级如上。然后,会判断是否存在package-lock.json
、yarn.lock
文件,(最新版本下npm init
会初始化package-lock.json
文件或者 yarn 作为管理,会有yarn.lock
)
package-lock.json
yarn.lock
默认情况下,npm install
将安装所有的依赖包生成node_modules
目录,当 NODE_ENV为production参数时,
npm install只安装
dependencies` 下的依赖包
npm install xxx
安装具体包,默认情况下,保存在dependencies
,可以通过参数控制安装行为。
-D, --save-dev
: 保存到devDependencies
--save
: 保存到dependencies
-B, --save-bundle
: 保存到bundleDependencies
中
安装算法
遵循扁平化安装优先原则。默认优先安装到node_modules
根目录下
package{dependencies}结构 A{B,C}, B{C}, C{D}安装算法
对于 A{B,C}, B{C,D@1}, C{D@2}此算法生成
npx
npx 是一个用于执行 Node 包的 tool,npm5.2 版本后,默认携带
当需要使 Cli 包时,往往都是全局安装包,npx 允许本地或远程运行 npm 包的命令,避免--global 安装,非常的便利。
npx 的作用
默认情况下,它首先检查要执行的包是否存在于路径中
如存在,则执行
否则,意味着包没有被安装,npx 会安装包 和 执行它
如果想要阻止这个默认安装包的行为,可以使用 npx xxx-package --no-install
没有 npx 以前,如果想要执行一个包,像这样
npx 很容易执行
应该要掌握的常见命令行
行文仓促,如果文中有表述不准确的地方,欢迎指正。
我是废材壶,前端开发者,欢迎微信搜一搜「 CodeLife 集」阅读不迷路
参考
版权声明: 本文为 InfoQ 作者【废材壶】的原创文章。
原文链接:【http://xie.infoq.cn/article/f85f0a47a9ef40a3e0fc3339c】。文章转载请联系作者。
评论