你也有可能会看见在 package.json 中模块的版本号前面既没有 ~
也没有 ^
就像下面那样:html
"moment": "2.4.0"
上面的状况属于精确安装模块指定的版本号。经过命令参数-E,或者 --save-exact
来指定版本号安装的。上述模块对应的精确安装命令:npm install --save-exact moment@2.4.0
node
npm outdate
与第三方工具npm-check
npm outdate
此命令会列出项目中全部已通过时的包,像下面同样:git
推荐使用检查依赖包更强大的一个工具 npm-check,更强大分析包的能力以及能够经过加上参数提供交互式更新方式,详情请参考其文档说明。安装完成后npm-check
检查项目依赖包,展现像下面同样:github
dependencies(生产环境的依赖的包目录)devDependencies(开发环境的依赖包目录)npm
在项目的 package.json 使用命令 npm install --save moduel
安装的模块会注册到 dependencies 目录中去(npm 5 开始 经过npm install不加--save 和npm install --save同样 都是局部安装并会把模块自动写入package.json中的dependencies里。)json
npm install --dev module
并会安装模块并自动写入package.json中的 devDependencies 里。gulp
当你 clone 下来了一个新项目在项目根目录下执行npm install
的时候是会同时安装 dependencies 和 devDependencies中的全部依赖。当你的项目须要在生产环境中只须要安装 dependencies 中的依赖时,执行的是npm install --production
命令。(若是配置了NODE_ENV环境变量为production,那么执行npm install
就只安装dependencies里面的包。安装完后能够用npm ls查看安装的包的状况。)缓存
With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies.
此外,你还有可能看到形如:网络
"optionalDependencies": { "gulp": "^3.9.1" }
optionalDependencies 是你在使用npm install npm install --save-optional gulp
是所注册在可选依赖里的模块包,在项目执行npm install --no-optional
就能够跳过可选包安装。工具
Tips : 在存在 package-lock.json 时npm install --no-optional
你可能会发现依旧装上了可选模块,(它的issue页讨论),此时你可能还要加上另一个参数执行npm install --no-optional --no-package-lock
才能如愿。
查看和管理npm的基础配置。npm config ls -l
能够经过npm config get proxy
查看你是否设置了npm 的代理。npm config set registry https://registry.npm.taobao.org
改为更快的淘宝源,解决出现安装不了模块或者速度慢的问题。
当你使用命令 npm config get cache
命令时 你会获得你的本地 npm 缓存的完整路径,npm 缓存是什么呢,能够先从npm install的执行过程提及(此部分参考阮一峰老师的博客):
实际上说一个模块安装之后,本地其实保存了两份。一份是~/.npm目录下的压缩包,另外一份是node_modules目录下解压后的代码。可是,运行npm install
的时候,只会检查 node_modules 目录,而不会检查~/.npm目录。若是一个模块在~/.npm下有压缩包,可是没有安装在node_modules目录中,npm 依然会从远程仓库下载一次新的压缩包。
阮老师在当时文中提到的离线安装时所说的有不少弊端的npm install --cache-min
命令已经在npm 5.0.0开始被 deprecated 了
--cache-min and --cache-max have been deprecated. (#15666)
咱们想利用已经在缓存中以前已经备份的模块实现离线模块安装的的 cache 机制已经在V5的时候重写了,缓存将由 npm 来全局维护再也不须要开发人员操心,离线安装时将再也不尝试链接网络,而是降级尝试从缓存中读取,或直接失败。就是若是你 offline ,npm将无缝地使用您的缓存。如下新增参数命令翻译自npm v5.0.0的release
--prefer-offline
选项将使npm跳过任何有条件的请求(304检查)过期的缓存数据,而且只有在缓存中丢失了某些内容时才能访问网络--prefer-online
选项,它将强制 npm 从新验证缓存数据(使用304次检查),忽略任何过期检查,并用从新验证的新数据刷新缓存。--offline
选项将强制npm使用缓存或退出。若是试图安装的任何内容还没有存在于缓存中,它将报 ENOTCACHED错误。npm cache verify
命令,它将对你的缓存进行辣鸡回收,减小不须要的东西占据的磁盘使用量,而且会对索引和内容进行全面的完整性验证。项目中若是是用 npm V5 以上版本就会有这么一个详细记录安装模块的细节的文件。肯定当前安装的包的依赖,以便后续从新安装的时候生成相同的依赖,而忽略项目开发过程当中有些依赖已经发生的更新。
当你想经过搜索引擎了解package-lock.json 问题的时候,你可能会被“坑”字吸引过去,你可能会看到过“若是手动修改了 package.json 文件中已有模块的版本,直接执行npm install不会安装新指定的版本,只能经过npm install xxx@yy更新” ,不过这是 V5.0.0 的问题,如今V5.4.2版本后若是改了package.json,且package.json和lock文件不一样,那么执行npm i
时npm会根据package中的版本号以及语义含义去下载最新的包,并更新至lock。详见这个知乎回答。