Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Yalc #26

Open
imyangyong opened this issue Jun 11, 2020 · 0 comments
Open

Yalc #26

imyangyong opened this issue Jun 11, 2020 · 0 comments

Comments

@imyangyong
Copy link
Collaborator

imyangyong commented Jun 11, 2020

Yalc

Yalc 是一个比 npm | yarn link 更加先进的解决方法,能够避免相关依赖的问题。

Why

在你开发 npm package 时,你肯定需要将正在开发的 package 注入到其他的项目中进行调试和测试,没问题后才会发布到 npm 上。NPM 和 Yarn 已经提出了类似 symlinks 的方案 (npm/yarn link)。虽然这在一般情况下很好用,但是它经常会有很恶心的依赖和约束问题

Yalc 是什么

  • yalc 在本地环境中创建了一个共享的 本地 package 存储库
  • 当在指定包目录中运行 yalc publish 时,会将本来发布到 NPM 上的相关文件放到本地一个共享的全局存储中 ( ~/.yalc)。
  • 在你需要引用的项目中运行 yalc add my-package 时,它会将包内容拉入根目录的的 .yalc 文件夹中,并将一个文件 "file:.yalc/my-package" 注入 package.json。如果使用 yalc link my-package 的话,就类似 npm | yarn link 一样创建项目链接,不会修改 package.json。
  • yalc 会在根目录创建一个 yalc.lock 文件(与 yarn.lockpackage-lock.json 类似),用于确保行为一致性。

安装

npm (scoped) Build Status

Using NPM:

npm i yalc -g

Using Yarn:

yarn global add yalc

文档中的一些功能可能还未发布,请浏览 change log

使用

发布

  • 在你的 package 目录执行 yalc publish
  • 这将复制你所有需发布至 npm 上的文件
  • 如果你的包有 preyalc, prepare, prepack, prepublishOnly, prepublish,这些生命周期 scripts,那么它们将在 publish 之前执行;同样的, postyalcpostpublish,将在之后执行。应用 --force 可直接 publish 不去执行它们。
  • 复制包内容时,yalc 会计算所有文件的哈希签名,默认情况下,将此签名添加到包清单 version 中。您可以使用 --no-sig 选项禁用此功能。
  • 你可以使用 .yalcignore 来排除像不需要发布到 yalc 本地库的文件。README.md etc
  • --files 选项可以展示在 yalc 库中包含的文件。
  • 注意! 如果你使用了嵌套的 yalc 包,例如 C -> B -> A,那么你应该在 B 的 package.json files 中包含 .yalc 文件夹或者在 .npmignore 中加入 !yalc 连同 C 一起发布,来防止引用出错。issue
  • **注意!**如果你想发布包含 .yalc 的 npm 包,你应该在 .npmignore 中加入 !.yalc
  • Easily propagate package updates everywhere.

添加

  • 在需要引用的项目中执行 yalc add my-package ,这将从 yalc 库中复制一份包到当前的项目 .yalc 文件夹并且在 package.json 的 dependency 中注入 file:.yalc/my-package
  • 执行 yalc add my-package@version 来制定版本,这个版本将同步到 yalc.lock 文件。
  • --link 选项将在 dependency 中添加 link: 而不是 file:
  • --dev 选项将 yalc 包添加到 dev dependencies。
  • --pure 选项将不再关心 package.json 文件,也不会更改 modules 文件夹,这个在使用 Yarn workspaces 时很有用。(下文有介绍)

链接

  • 除了 add 之外,你可以使用类似 npm/yarn linklink 命令,但符号链接源不是全局链接目录,而是项目的本地 .yalc 文件夹。
  • yalc 将软件包内容复制到 .yalc 文件夹之后,它将创建一个符号链接: project/.yalc/my-package ==> project/node_modules/my-package 在这种情况下它不会接触到 package.json

更新

  • 运行 yalc update my-package 从存储中更新最新版本。
  • 运行 yalc update 以更新 yalc.lock 中找到的所有软件包。
  • 更新后,会执行引用项目中的 scripts.postupdate 生命周期命令。

删除

  • 运行 yalc remove my-package,它将从 package.jsonyalc.lock 中删除软件包信息。
  • 运行 yalc remove --all 从项目中删除所有软件包。

安装

  • 执行 yalc installations clean my-package 来取消发布通过 yalc publish 发布的包。
  • 执行 yalc installations show my-package 来展示 my-package 安装的所有包。

注意! 目前, yalc 会复制包内容到 node_modules 文件夹,但之后不会执行 yarn/npm install/update (除非你使用 --yarn/npm 选项) 命令,所以你或许要手动执行。


高级用法

自动将更新推送到所有安装

  • 在运行 yalc add|link|update 时,会跟踪并保存项目位置包,因此 yalc 知道存储在本地环境中的每个包的位置。

  • yalc publish --push 将你的包发布到存储区,并将所有更改传播到现有的 yalc 包安装( 这实际上会在位置上执行 update 操作)。

  • yalc push 是用于推送操作( 这将成为你主要使用的发布命令)的快捷键命令:

    • 默认情况下 force 选项是 true,因此它不会运行 pre/post 脚本( 可以使用 --no-force 标志更改这里选项)。
  • 使用 --changed 选项,yalc 将在发布和推送前检查包内容是否发生了变化,这是一个快速的操作,对于文件监测场景和推送更改可能很有用。

Keep it out of git

  • 如果开发时临时使用 yalc'ed 模块,则首先向 .gitignore 添加 .yalcyalc.lock
  • 使用 yalc link,它不会更改 packages.json
  • 在你使用 yalc add 的时候,如果你忘了删除它,那么你可以在 precommit hook 中使用 yalc check,它来检查 package.json 的 yalc'ed 依赖项,存在则提示错误 。

Keep it in git

  • 你可以能希望在工作的项目中保留共享的 yalc'ed 内容,并将它的视为项目代码库的一部分。 这样做可以简化管理和使用共享插件的操作和使用,在项目中进行打包,并帮助使事情一致。 那么,就这么做吧,把 .yalc 文件夹和 yalc.lock 保存在 git 中。
  • 当准备好时,将它的替换为来自远程存储库的已经发布版本。
  • 注意!README, LICENCE 这样的非代码文件,也会包含在内,所以你可能会在 .gitignore 中加入它们,或者你也可以在 .yalcignore 中加入它们。

Use with Yarn workspaces!

如果你在 workspace 项目中添加 repo ,--pure 选项会默认使用,所以 package.json 和 modules 文件夹不会被更改。

然后,你会在 package.json 中添加 yalc 包到 workspace 项目中(可能只会添加 .yalc/*.yalc/@*/* 这种形式)。当执行 updatepush 操作时,包内容会自动更新并且 yarn 继续执行自己的操作。

如果你不想使用 pure 行为,请使用 --no-pure 选项。

清理安装文件

  • 在开发机器上使用 yalc 一段时间后,你可能会遇到这样的情况:你添加了 yalc 的包的位置已经从文件系统中删除,当 yalc 试图将包推到已删除的位置时,这将导致一些警告消息。为了摆脱这些消息,有一个明确的命令:yalc installation clean [package]

修改 yalc 包的默认存储路径

  • 你可以使用 --store-folder 选项来修改发布的 yalc 包的存储路径。

相关链接

Licence

WTF.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant