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:worksworkspacefront-newpy
ode_modulespuppeteerlibhelper.js:111:15)
    at Object.<anonymous> (C:worksworkspacefront-newpy
ode_modulespuppeteerinstall.js:64:16)

 所以才配置了这个选项,让Chromium下载走这个路径,详细查看:npm安装puppeteer时,如何设置chromium下载加速地址?

 【注意】淘宝镜像不是实时的,官方描述为10分钟同步一次,本人感觉不止。本人有一个1小时前发布的包,通过镜像依然查不到最新版本

 node-sass安装不成功

之所以把这个列在这里,主要是因为这个问题太常见了,几次上线都遇到这个问题。看这篇文章

源的问题可以通过上面registry解决,但是node-sass中还会去github拉取二进制文件,太难为中国人了。

为什么node-sass总是安装失败?

推荐文章

  2018 年了,你还是只会 npm install 吗

  npm install package-lock.json 的更新策略 

 
原文地址:https://www.cnblogs.com/chuaWeb/p/12167335.html