工程化项目之 npm和yarn

npm常用指令

`npm i packageName -D`: --save-dev 写入devDependencies

`npm i packageName -S`:  --save    写入dependencies

`npm i packageName -g`:  --global 全局安装  注意,一定不能使用-G

`npm info packageName`: 查看包的版本

`npm view packageName versions`:查看当前包的版本信息,有s则代表所有版本,没s代表现在本地的版本
`packName --version`:查看包的本地版本
`yarn || npm`: 之前在项目中踩过一个坑,就是无法下载最新改动的包,后来发现是由于`yarn`缓存造成的,所以,下次遇到下载不到最新包,可以使用`yarn cache clean`

`yarn add packName@latest`: 安装最新的包
`yarn cache clean`: 清除缓存

npm link 意思是将当前的模块link到全局,而npm link packName 则是将当前全局的包link到本项目中去,所以使用npm link、npm link PackageName 必须在package.json目录下

版本号

{
    'dependencies': {
        'foo': '1.0.0 - 2.9999.9999',
        'bar': '>=1.0.2 <2.1.2',      //必须大于等于1.0.2版本且小于2.1.2版本
        'baz': '>1.0.2 <=2.3.4',      //必须大于1.0.2版本且小于等于2.3.4版本
        'boo': '2.3.1',                 //必须匹配这个版本
        'boo': '~2.3.1',               // 约等于2.3.1,只更新最小版本,相当于2.3.X,即>=2.3.1 <2.4.0
        'thr': '2.3.x',
        'boo': '^2.3.1',     //与2.3.1版本兼容,相当于2.X.X, 即>=2.3.1 < 3.0.0,不改变大版本号。
        'qux': '<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0',
        'asd': 'http://asdf.com/asdf.tar.gz',   //在版本上指定一个压缩包的url,当执行npm install 时这个压缩包会被下载并安装到本地。
        'til': '~1.2',
        'elf': '~1.2.3',
        'two': '2.x',
        'lat': 'latest',             //安装最新版本
        'dyl': 'file:../dyl',         //使用本地路径
        'adf': 'git://github.com/user/project.git#commit-ish' //使用git URL加commit-ish
        }
};

# 版本范围详解

`连字符范围:X.Y.Z-A.B.C`
1.2.3 - 2.3.4>=1.2.3 <=2.3.4   // 指明版本范围
1.2 - 2.3.4: 相当于1.2.0 - 2.3.4// 起始版本不全: 缺少的部分补0
1.2.3 - 2.3 :相当于 >=1.2.3 < 2.4.0 // 结束版本不全:所有以其开头的版本均符合要求
1.2.3 - 2: 相当于 >=1.2.3 < 3.0.0

`带有X的版本范围:“1.2.X ”、“1.X” 、“1.2.*”` 
任何带有X、x 和 *的版本号都是有谁存在就要匹配谁。
*>=0.0.0
"": >=0.0.0
1.x: >=1.0.0 <2.0.0
1.2.x: >=1.2.0 <1.3.0
1: >=1.0.0 <2.0.0
1.2: >=1.2.0 <1.3.0

波浪号范围 ~1.2.3 ~1.2 ~1
~1.2.3: >=1.2.3 <1.3.0, 只能更新
~1.2: >=1.2.0 <1.3.0(相当于~1.2.01.2.x)
~1>=1.0.0 <2.0.0 (相当于1.X,所有的1.X.X~1.2.3-beta.2: >=1.2.3-beta.2 <1.3.0

如何发布包

- 在镜像源那注册一个账号
- 然后在项目中(package.json)目录下进行npm login
- 最后使用npm publish  -- 谨记不要加包名
- 注意package.json中的name必须是唯一的,不然会发布不成功

# 如何创建一个npm镜像
- npm config set registry URL

npm 排错指南

`Failed at the [email protected] install script.`:指的是缺少一个phantom的包,所以才link不成功,其次,要注意打包脚本里面引入的东西,例如变量、包是不是更新了?注意了,在git bash里面使用命令的时候,不一定要在npm/node_modules里面,因为脚手架不是npm包,所以。。 

yarn.lock与npm.lock

根据package.json里面的版本来看,如果配置了
"vue": "^2.5.0"表示安装2.x.x里面最高的版本,即使package.json里面显示的版本还是"^2.5.0",实际上已经使用到了最新的 2.latest.latest
"vue": "~2.5.0",表示安装 2.5.x里面最高的版本,就是2.5.latest
"vue": "2.5.5",这个是recommand方式,这样可以锁住版本某一个版本。

yarn & npm

yarn Features
# Offline Mode.
If you've installed a package before, then you can install it again without an internet connection.

#Deterministic.
The same dependencies will be installed in the same exact way on any machine, regardless of installation order.

#Network Performance.
Yarn efficiently queues requests and avoids request waterfalls in order to maximize network utilization.

# Network Resilience.
A single request that fails will not cause the entire installation to fail. Requests are automatically retried upon failure.

# Flat Mode. 
Yarn resolves mismatched versions of dependencies to a single version to avoid creating duplicates.

# More emojis. 

npm 
# first of all, below configuration is my love
npm is configured to use npm, Inc.'s public registry at https://registry.npmjs.org by default. Use of the npm public registry is subject to terms of use available at https://www.npmjs.com/policies/terms.

You can configure npm to use any compatible registry you like, and even run your own registry. Check out the doc on registries.

分别查看npm和yarn的启动程序位置
yarn global bin
npm -g bin

设置镜像
yarn/npm config set registry https://registry.npm.taobao.org
yarn/npm config get registry

# 值得一提
npx 是 npm 5.2+ 版本之后自带的工具,能够帮助我们更高效的执行 npm 软件仓库里的安装包

npx create-react-app my-app
# 执行以上这条命令 npx 会按以下顺序工作:
# 1. 先查看当前项目有没 create-react-app
# 2. 如果当前项目找不到,会去全局查找 create-react-app
# 3. 如果全局还找不到,会帮我们临时从 npm 包仓库安装 create-react-app,不会污染到当前项目,也不会装到全局

yarn login报错

yarn init报错 Can't answer a question unless a user TTY
使用cmd或者powerShell 不要用git bash

你可能感兴趣的:(包管理,package,manager)