node.js 随笔 2-包管理器

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');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肯尼思布赖恩埃德蒙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值