美文网首页
yarn包管理工具的使用

yarn包管理工具的使用

作者: 古德毛宁_39de | 来源:发表于2019-05-16 11:28 被阅读0次

    Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码。Yarn 做这些快捷、安全、可靠,所以你不用担心什么。
    通过Yarn你可以使用其他开发者针对不同问题的解决方案,使自己的开发过程更简单。 使用过程中遇到问题,你可以将其上报或者贡献解决方案。一旦问题被修复, Yarn会更新保持同步。
    代码通过 包(package) (或者称为 模块(module)) 的方式来共享。 一个包里包含所有需要共享的代码,以及描述包信息的文件,称为 package.json

    与npm的区别

    Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。它的目的是解决这些团队使用 npm 面临的少数问题,即:

    • 安装的时候无法保证速度/一致性
    • 安全问题,因为 npm 安装时允许运行代码

    npm 和 Yarn 都使用 package.json 来跟踪项目的依赖,版本号并非一直准确,因为你可以定义版本号范围,这样你可以选择一个主版本和次要版本的包,但让 npm 安装最新的补丁也许可以修改一些 bug。
    理想状态下使用语义化版本发布补丁不会包含大的变化,但不幸的是这必非真理。npm 的这种策略可能导致两台拥有相同 package.json 文件的机子安装了不同版本的包,这可能导致一些错误。
    为了避免包版本的错误匹配,一个确定的安装版本被固定在一个锁文件中。每次模块被添加时,Yarn 就会创建(或更新)yarn.lock 文件,这样你就可以保证其它机子也安装相同版本的包,同时包含了 package.json 中定义的一系列允许的版本。
    在 npm 中同样可以使用 npm shrinkwrap 命令来生成一个锁文件,这样在使用 npm install 时会在读取 package.json 前先读取这个文件,就像 Yarn 会先读取yarn.lock 一样。这里的区别是 Yarn 总会自动更新 yarn.lock,而 npm 需要你重新操作。

    除了一些功能差异,Yarn 命令也存在一些区别。例如移除或修改了一些 npm 命令以及添加了几个有趣的命令。

    yarn global

    不像 npm 添加 -g--global 可以进行全局安装,Yarn 使用的是 global 前缀。不过与 npm 类似,项目依赖不推荐全局安装。

    global 前缀只能用于 yarn add, yarn bin, yarn lsyarn remove,除yarn add外,这些命令都和 npm 等效。

    1. yarn global 文档

    yarn install

    npm install 命令会根据 package.json 安装依赖以及允许你添加新的模块;yarn install 仅会按 yarn.lockpackage.json 里面的依赖顺序来安装模块。

    1. yarn install 文档
    2. npm install 文档

    yarn add [–dev]

    npm install 类似,yarn add 允许你添加与安装模块,就像命令的名称一样,添加依赖意味着也会算定将依赖写入 package.json,类似 npm 的 --save 参数;Yarn 的 --dev参数则是添加开发依赖,类似 npm 的 --save-dev 参数。

    1. yarn add 文档
    2. npm install 文档

    yarn licenses [ls|generate-disclaimer]

    npm 没有类似命令来方便编写自己的包。yarn licenses ls 列出所有已安装包的许可协议。yarn licenses generate-disclaimer 生成包含已安装包许可协议的免责声明。某些协议要求使用者必须在项目中包含该协议,这时候该命令将变得非常好用。

    1. yarn licenses 文档

    yarn why

    该命令会查找依赖关系并找出为什么会将某些包安装在你的项目中。也许你明确为什么添加,也许它只是你安装包中的一个依赖,yarn why 可以帮你弄找出。

    1. yarn why 文档

    yarn upgrade

    该命令会根据符合 package.json 设定的规则而不是 yarn.lock 定义的确切版本来将包更新到最新版本。如果想用 npm 来实现相同目的,可以这样执行:

    Shell

    1 rm -rf node_modules
    2 npm install

    不要将该命令与 npm update 混淆,它指的是更新到自己的最新版。

    1. yarn upgrade 文档

    yarn generate-lock-entry

    yarn generate-lock-entry 会基于 package.json 设置的依赖生成 yarn.lock 文件,该命令与 npm shrinkwrap 类似,但应该小心使用,因为通过 yarn addyarn upgrade 命令添加或更新依赖时会自动更新生成该锁文件。

    1. yarn generate-lock-entry 文档
    2. npm shrinkwrap 文档

    在这介绍两种安装方式:

    安装

    1. npm工具安装

     npm install yarn -g
    

    2. 官网安装

    点击打开

    使用

    初始化一个新项目

    相当于npm的 npm init

    yarn init
    
    添加依赖包

    相当于npm的 npm install [packageName] --save

    yarn add [package]                          
    yarn add [package]@[version]          
    yarn add [package]@[tag]
    
    将依赖项添加到不同依赖项类别中

    分别添加到 devDependenciespeerDependenciesoptionalDependencies 类别中:

    yarn add [package] --dev           相当于 npm install [package] --save-dev
    yarn add [package] --peer
    yarn add [package] --optional
    
    dependencies:   正常的运行过程中的依赖 浏览器跑的时候
    devDependencies:   开发模式 所用的依赖
    peerDependencies:   当你发布项目的时候 可以指定该依赖
    optionalDependencies:   可有可无,表示在安装失败的时候一个备选的依赖保证过程
    bundleDependencies:   发布项目的时候所用的依赖 不是从npm来的 一起打包发布到
    
    升级依赖包

    相当于npm的 npm update

    yarn upgrade [package]
    yarn upgrade [package]@[version]
    yarn upgrade [package]@[tag]
    
    移除依赖包

    相当于npm的 npm uninstall [package]

    yarn remove [package]
    
    安装项目的全部依赖

    相当于npm的 npm i 或者 npm install

    yarn
    

    或者

    yarn install
    
    依赖和版本

    在yarn中与npm中类似都有两个依赖和版本文件
    依赖项的类型 package.json
    依赖项的指定版本 yarn.lock

    yarn.cock文件使机器之间获得一致的安装。
    package.json将包含所有这些依赖项:

    {
      "name": "my-project",
      "dependencies": {
        "package-a": "^1.0.0"
      },
      "devDependencies": {
        "package-b": "^1.2.1"
      },
      "peerDependencies": {
        "package-c": "^2.5.4"
      },
      "optionalDependencies": {
        "package-d": "^3.1.0"
      }
    }
    

    Yarn使用yarn.lock项目根目录中的文件。这些“锁定文件”看起来像这样:

    # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
    # yarn lockfile v1
    package-1@^1.0.0:
      version "1.0.3"
      resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
    package-2@^2.0.0:
      version "2.0.1"
      resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
      dependencies:
        package-4 "^4.0.0"
    package-3@^3.0.0:
      version "3.1.9"
      resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
      dependencies:
        package-4 "^4.5.0"
    package-4@^4.0.0, package-4@^4.5.0:
      version "4.6.3"
      resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
    

    yarn命令

    常用命令

    1. yarn add
    yarn add   //添加要在当前包中使用的包。
    
    2. yarn init
    yarn init   //初始化包的开发。
    
    3. yarn install
    yarn install   //安装package.json文件中定义的所有依赖项。
    
    4. yarn publish
    yarn publish   //将包发布到包管理器。
    
    5. yarn remove
    yarn remove  //从当前包中删除未使用的包。
    

    自定义命令

    运行已定义的包脚本

    您可以在 package.json文件中定义要运行的脚本命令

    {
      "name": "my-package",
      "scripts": {
        "build": "babel src -d lib",
        "test": "jest"
      }
    }
    
    
    yarn run [script] [<args>]

    如果已在scripts包中定义了一个对象,则此命令将运行指定的对象[script]。例如:

    yarn run test
    

    运行此命令将执行package.json中您指定的脚本命令"test"

    您可以通过在脚本名称后面传递其他参数来将其传递给脚本。

    yarn run test -o --watch
    

    运行此命令将执行jest -o --watch

    [script]也可以是里面的任何本地安装的可执行文件node_modules/.bin/

    也可以省略run这个命令,每个脚本都可以用它的名字执行:

    yarn test -o --watch
    

    运行此命令将执行相同的操作yarn run test -o --watch。请注意,内置cli命令将优先于您的脚本,因此您不应始终在其他脚本中依赖此快捷方式

    yarn run env

    运行此命令将列出运行时脚本可用的环境变量。

    如果要覆盖此命令,可以通过在其中定义自己的"env"脚本来执行此操作package.json

    yarn run

    如果未指定yarn run命令的脚本,该run命令将列出可用于运行包的所有脚本。

    相关文章

      网友评论

          本文标题:yarn包管理工具的使用

          本文链接:https://www.haomeiwen.com/subject/bdmeaqtx.html