如何解决纱线+莱娜+角掌=破损出版?
reHi!
这是交易,我们有一个monorepo。我们正在将Lerna&Yarn与一堆Angular库一起使用。
在每个包/库的package.json中,我们都有类似的内容:
"prepublishOnly": "yarn build <library name goes here>"
Yarn在工作空间中的工作方式为yarn install
,它可以做到。因为我们使用工作区,所以它会为包创建符号链接。例如,如果我们在顶层@foo/bar
中有一个名为node_modules
的程序包,则我们会将node_modules/@foo/bar
作为到libs/foo-bar
的符号链接。
除了node_modules/@foo/bar
中的内容尚未准备好发布之外,Yarn Workspace都很好。首先,我们需要使用Angular CLI的编译器来构建软件包。
我们使用prepublishOnly
中已经提到的package.json
脚本来完成此操作。
什么是有效的,当需要构建所有软件包时。流程进行到:
-
yarn install
-做符号链接/工作区魔术。 -
lerna publish --contents dist
-做monorepo魔术。 Lerna将看到所有软件包都进行了修改,并在所有软件包上运行prepublishOnly
。这样,node_modules/@foo
中的内容将是“合法” NPM软件包(用于构建库的Angular CLI的输出)
问题是当单个库进行修改时。
-
yarn install
-做符号链接/工作区魔术。node_modules/@foo
中的所有内容都将是指向libs/<package-name>
的符号链接,此时它们是源文件。不是NPM软件包 -
lerna publish --contents dist
-启动...,然后转到“哦,只有Package A发生了更改。所以让我对它进行挑战。” Lerna将失败,因为node_modules
中的其他软件包不是合法的NPM软件包。
我需要弄清楚如何做:
- 在进行发布时始终构建所有软件包或
- 在构建过程中以某种方式使用NPM注册表中的软件包
我觉得我在某个地方缺少一些简单的东西。
如果有示例可以帮助我解释,请询问。
解决方法
在发布时始终构建所有软件包
在您的根package.json中(考虑到您已经将lerna作为开发依赖项)
[
{
"ID": "ID001","Type": "Type1","W1": 1,"W2": 2
},{
"ID": "ID001","Type": "Type2","W1": 2,"W2": 3
},"Type": "Type3","W1": 3,"W2": 4
}
]
在您的library1包中
{
"scripts": {
"publish-ci": "lerna run build && lerna publish --content dist"
}
}
现在您可以在根文件夹上运行 "scripts": {
"build": "yarn build library1"
}
,所有内容都将构建并发布。
您还可以使用yarn publish-ci
标志来仅发布更改的软件包。
在构建过程中以某种方式使用NPM注册表中的软件包
在这里,您只需要lerna即可更改软件包,而不是发布软件包,这是一种骇人听闻的方式
在您的根包中。json
lerna publish --from-package
在custom.publish.js中
{
"scripts": {
"publish-ci": "node custom.publish.js"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。