NPM实践
npm源问题:
package-lock.json文件中因他人本地 npm source 设置不同,导致官方源 https://registry.npmjs.org
,混入了 taobao 源。Jenkins 发布不稳定、个别依赖包最新版本没有被 taobao 源支持,等等,都会导致导致 npm 构建失败。统一包来源的方法:
- 删除 package-lock.json
- 删除 node_modules 目录(即已安装的文件)
- 运行 npm install
查看当前npm源
npm config get registry
npm脚本指令
Additionally, arbitrary scripts can be executed by running npm run-script <stage>
. Pre and post commands with matching names will be run for those as well (e.g. premyscript, myscript, postmyscript).
也就是说,如果你有一个 build 指令,当执行完 npm run build
后,可以自动执行 npm run postbuild
想要在构建完成之后,删除source map文件,可以通过在package.json中添加:
"postbuild": "rimraf ./build/**/*.js.map"
macOS升级npm
从Node.js官方下载pkg文件安装的 Node.js 如何升级?
直接下载最新稳定版 pkg 文件根据指令安装即可。
重新打开 terminal,运行以下命令检查是否更新成功。
node -v // v12.14.1
npm -v // 6.13.4
npx
从npm 5.2.0 开始,自动安装了npx。npx 主要用于命令行的寻址等辅助功能上,好处就是避免安装全局命令。
安装私有代码库指定版本依赖
url格式参看文档:
git+ssh://git@github.com:npm/cli.git#v1.0.27
git+ssh://git@github.com:npm/cli#semver:^5.0
git+https://isaacs@github.com/npm/cli.git
git://github.com/npm/cli.git#v1.0.27
结合 Git commands文章里使用tag的内容,npm 将在远端仓库查找任何与指定的commit id关联的 tags 或 refs。如果url后面既没有 #<commit-ish>
也没有 #semver:<semver>
则使用 master 分支的代码。
Yarn
比起 npm,同样作为包管理工具的 Yarn 旨在提升性能和安全。Yarn 作为 npm 包,可以通过 npm install,但是其核心开发团队不建议这样做,按官方推荐安装。
使用:运行 yarn
命令,基于 package.json 的版本范围,自动生成或更新 yarn.lock 文件。其中包含:已安装的每一个单独依赖的确切 version、代码的checksums(用来判断代码是否一致的 integrity)、下载地址 resolved。
package.json 指定了依赖的版本范围,而依赖包随时都有可能更新,因此需要锁定单一版本。
yarn.lock 作为 lockfile 保证在任何系统(机器)上在 node_modules 里的依赖文件结构相同,能够阻止自动安装新的有 breaking change 的依赖。锁文件在 Yarn 第一版面世,npm5 随后(2017年5月)推出了 package-lock.json 来确保项目安装的依赖版本。
2020年1月推出的 Yarn2 评价不太好。
Yarn 的安装速度比 npm 块(npm6 稍微追赶上了一些)。生成确定的构建结果,使用 yarn.lock 结合指定版本的 Yarn 足够了。
每一个项目都应该提交lock文件,这篇文章从几个方面阐述了原因,现在已经是共识。
npm7
npm7采用了yarn.lock,同时也保留了package-lock.json官方 解释了为什么这样做。
package-lock.json 锁定结果 tree shape,提供确定可复制重现的 builds,还有一些额外的 metadata。而 yarn.lock 文件仅锁定 resolution,树构建合约被拆分到(取决于) Yarn.lock 文件和 Yarn 本身的实现(不同版本 Yarn 的算法不一致,其依靠算法保证结果 resolution 一致)
尽管 npm 使用 yarn.lock 文件作为可靠的信息源,但它并不将其视为权威的约束集。
npm link
开发 npm 模块本地调试和测试方法:
- 在开发的 npm 模块项目里,运行
npm link
,mac 如果报 permission denied 在命令前加 sudo - 进入运行/引用 npm 模块的项目,运行
npm link <npm模块项目名称>
耐心等待运行结束,可以看到 console 输出
/Users/CF/Documents/projects/wholee-msite/node_modules/cf-front-utils -> /usr/local/lib/node_modules/cf-front-utils -> /Users/CF/Documents/projects/cf-front-utils
- 调试完毕后,运行
npm unlink <npm模块项目名称>
解除链接
注意:
- 确保 npm 模块和引入模块的项目运行在相同版本的 node 环境里
- 修改模块代码后要重新 build
- 模块代码更新后,项目里仍然加载的是旧代码,先 unlink,再重新 link
nvm
官方代码库
macOS 10.15以上默认shell是 zsh,而 nvm 会查找 .zshrc 去更新,但是这个文件默认是没有的。因此:
- touch ~/.zshrc
-
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh bash - 关闭终端,重新打开
- 检查是否已安装:command -v nvm
终端输出 nvm
表示安装成功。
查看已安装的 node 版本
nvm ls