0.一开始就魔法冲浪,所以npm就用习惯了
Nodejs.cn npm包管理器简介
npmjs.cn npm中英混合教程,指令写的挺省略的
yarn 官方 中英混合文档,我真的佛了
1.安装位置
1.1 本地安装
默认安装到 node_modules 下,并且npm还将在package.json的dependencies 属性中插入这个依赖
1.2 全局安装
将会被安装到npm在你的系统中的某一个位置,与你的项目的目录是脱钩的,nvm的话,也是同理。
2.package.json
作为npm 和 yarn 存储所有已安装软件包的名称和版本的地方
2.1 json结构
{
"name": "test-project",
"version": "1.0.0",
"description": "A Vue.js project",
"main": "src/main.js", //程序的入口,当在应用程序中导入此软件包时,应用程序会在该位置搜索模块的导出。
"private": true, //true,则可以防止应用程序/软件包被意外发布到 npm 上
"scripts": { //相当于声明一组node.js脚本的简写
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"unit": "jest --config test/unit/jest.conf.js --coverage",
},
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": { //开发环境下的依赖
"autoprefixer": "^7.1.2",
},
"engines": { //脚本引擎的版本
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": ["> 1%", "last 2 versions", "not ie <= 8"] //浏览器的支持度,Babel、Autoprefixer 和其他工具会用到它
}
2.2 语义版本控制
2.2.1 版本号
主版本 . 次版本 . 补丁版本
2.2.2 语义化版本控制的符号
无符号: 仅接受指定的特定版本
latest: 使用可用的最新版本
^: 只会执行不更改最左边非零数字的更新。 如果写入的是 ^0.13.0,则当运行 npm update 时,可以更新到 0.13.1、0.13.2 等,但不能更新到 0.14.0 或更高版本。 如果写入的是 ^1.13.0,则当运行 npm update 时,可以更新到 1.13.1、1.14.0 等,但不能更新到 2.0.0 或更高版本。
~: 如果写入的是 〜0.13.0,则当运行 npm update 时,会更新到补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
< <= > >= 不说了,dddd
- 接受一个范围。例如:2.1.0 - 2.6.2。
|| 表‘或’ ,例如 < 2.1 || > 2.6。
3.版本锁定文件
package.json对依赖的语义化版本控制使得其版本无法固化
3.1 package-lock.json
npm5 引入,该文件旨在跟踪被安装的每个软件包的确切版本
3.2 package-lock.json结构
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"cowsay": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz",
"integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM
Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
"requires": { //该依赖所需的依赖
"get-stdin": "^5.0.1",
"optimist": "~0.6.1",
"string-width": "~2.1.1",
"strip-eof": "^1.0.0"
}
}
}
3.3 yarn.json
yarn的版本锁定文件
4.命令
查询版本号
本地已安装
npm ls 软件包 [-g]
远程所有可用
npm view 软件包 versions --json
安装软件包
npm install [-g] 软件包[@版本号] [-dev]
这里的-dev只是举例,表示node.js的script
npm 5+ 默认了--save(同步到package.json),故不需要写
如果只有‘npm install’那么将检查并安装package.json对应的所有软件包
卸载
npm uninstall [-g] 软件包
镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm config set registry=http://registry.npm.taobao.org/
npm config set registry https://registry.npmjs.org
npm install nrm -g + nrm ls
其他
npm config ls
npm cache clear --force
5.建议全局安装的软件包
镜像
脚手架
第三方包管理器
其他(nrm)
6.npm & yarn
npm
node.js默认使用的、官方维护的
npm 5.x 之前确实对比yarn来说,包完整性、包安装速度、版本唯一性方面要拉跨;npm 5.x以后就好起来了。
yarn
离线模式(自动缓存了之前安装过的版本,重复安装无需下载)
异步的包下载,带宽的利用更充分,不会因为一个包下载失败而阻塞整个流程
7.遇到的问题
问题1:npm install 软件包,报错:没有权限,需要管理员权限下的cmd才能运行(node.js目录文件夹右键可见需要权限)
解决1:win10下的安装方式不要用.msi安装程序安装,改用解压zip的方式会更加简单
1.1 配置node.js的path
1.2 根目录下创建node_cache、node_global两个空文件夹
1.3 npm config set prefix "node_global的路径"
1.4 npm config set cache "node_cache的路径"
问题2:npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\...\package.json'
解决2:缺少全局的package.json -> npm init -y
问题3:重装软件包前,确认旧版本被删干净了
解决3:
默认安装路径->C:/user/用户名/AppData/
手动创建路径->node_global(看是不是全局安装了)
问题4:nrm ls 报错internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value)
解决4:报错中有一个(...\cli.js:17:20),修改这个文件
//const NRMRC = path.join(process.env.HOME, '.nrmrc');
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');