npm笔记
安装包
npm install <包名>@<版本号> ,普通安装,install可以简写为 “i”
npm install <包名>@<版本号> <--save|-S>,如果要将依赖保存到package.json的dependencies
npm install <包名>@<版本号> <--save-dev|-D>,如果要将依赖保存到package.json的devDependencies
npm install <包名>@<版本号> --registry=https://registry.npmjs.org/ 指定源安装npm包
查看第三方包的信息
npm view scratch-render versions,查看scratch-render的所有版本列表
npm view scratch-render version,查看scratch-render最新的版本名称
npm info scratch-render,查看scrach-render最新版本的详情
npm info scratch-render@0.1.0-prerelease.20190419202157,查看指定的scratch-render版本的详情
npm ls scratch-storage <-g>,查看本地(全局)安装的包的信息
package.json
工程入口定义:
main
: 定义了npm
包的入口文件,browser 环境和 node 环境均可使用module
: 定义npm
包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用browser
: 定义npm
包在 browser 环境下的入口文件
文件优先级: mjs(能在 node 环境下原生执行 ESM 规范的脚本文件)
> js
dependencies devdependencies 区别
这篇文章讲的比较清除:包应该放在devDependencies还是dependencies
简单来说,如果只是单纯的做项目,那么可简单地认为生产环境和开发环境做为一种友善的提示,实质没有什么区别;但是,如果发布npm包在被第三方npm install时,该包的depandencies会一并下载下来,包内devdependencies依赖不会下载
cnpm、package-lock.json
由于国内npm下载比较慢,所以一般通过国内npm镜像来解决问题,比如cnpm,使用方法参考:https://developer.aliyun.com/mirror/NPM?from=tnpm
可以用,但是有几个问题:
- 无法生成package-lock.json(维护者名别表示不会支持:https://github.com/cnpm/cnpm/issues/226),这个文件会指定你运行的程序的所有依赖包的版本,确保开发/生产使用的包的版本完全相同。
- 不识别package-lock.json, cnpm安装不会去识别这个文件,会完全按照你的package.json来按照,所以每次用cnpm i安装的版本都可能不一样,和可能导致你的工程今天可用,第二天cnpm一下就跑不起来了。
除了使用 “npm i”会生成和更新package-lock.json外,还有一种方式可以单独生成和更新package-lock.json:npm i --package-lock-only
使用npm命令,但链接国内的registry:
可以通过设置npm的registry来实现
- npm --registry https://registry.npm.taobao.org install express, 通过淘宝registry下载express
- npm config set registry https://registry.npm.taobao.org , 永久配置registry为淘宝,配置后可通过下面方式来验证是否成功npm config get registry 或 npm info express
- 通过nrm来管理和切换registry:https://github.com/Pana/nrm
【注】package-lock.json有自己的更新策略,详细可以查看后面的推荐文章。
【注】通过设置全局的registry后更新package-lock.json,可能重新生成的package-lock.json中依赖的资源resolved依然是https://registry.npmjs.org/。可能原因:
- npm版本的问题。比如本人的6.4.0居然不行,升级到6.4.1就可以了
- 先删除package-lock.json和node_modules,然后再使用:npm i --package-lock-only
在.npmrc中设置registry:
为了保证团队合作中使用的registry一致,建议在.npmrc中配置registry。比如本人的
registry=https://registry.npm.taobao.org/ puppeteer_download_host = https://npm.taobao.org/mirrors
你一定很好奇为什么要配置后面这句话。在实际运用中发现,部分资源如puppeteer内部会去下载Chromium,不受registry的影响。下载缓慢并报错
ERROR: Failed to download Chromium r686378! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download. { Error: read ECONNRESET at TLSWrap.onStreamRead (internal/stream_base_commons.js:111:27) -- ASYNC -- at BrowserFetcher.<anonymous> (C:\works\workspace\front-newpy\node_modules\puppeteer\lib\helper.js:111:15) at Object.<anonymous> (C:\works\workspace\front-newpy\node_modules\puppeteer\install.js:64:16)
所以才配置了这个选项,让Chromium下载走这个路径,详细查看:npm安装puppeteer时,如何设置chromium下载加速地址?
【注意】淘宝镜像不是实时的,官方描述为10分钟同步一次,本人感觉不止。本人有一个1小时前发布的包,通过镜像依然查不到最新版本
node-sass安装不成功
之所以把这个列在这里,主要是因为这个问题太常见了,几次上线都遇到这个问题。看这篇文章
源的问题可以通过上面registry解决,但是node-sass中还会去github拉取二进制文件,太难为中国人了。
推荐文章
npm install package-lock.json 的更新策略