tof*_*med 6 npm lerna monorepo yarnpkg yarn-workspaces
假设有一个带有 packageA和 的monorepo B。
包A依赖于B. 包B也发布在 npm 注册表中。因此,在安装依赖项时,它不会从 npm 注册表安装包,而是按预期B符号链接到本地包。B
但是有什么方法可以避免这种行为并始终从 npm 注册表解析包吗?
目前,似乎不可能开箱即用。例如,nohoist选项 inyarn适用于 monorepo 中不存在的包依赖项。例如,react-native等等。对于被其同级包消耗的 Same-monorepo 包nohoist不起作用,我尝试在根 package.json 和包上设置它。这是行不通的。
请注意,我说的是“开箱即用”。
\n我来这里寻找解决方案是因为我想将自定义 ESLint 插件迁移到我的 npm 包 monorepo 中,而该包恰好会消耗它们。
\n挑战是,ESLint 插件不是 ESM,它们是 CJS,并且在 TS/纯 ESM monorepo 中,ESM 和 CJS 不能很好地协同工作。
\n我的 CJS ESLint 插件将被提升,并且 ESLint 插件将拒绝加载它们,从而完全破坏了我的 VSCode linting。
\n我想出了一个想法来避免这种托管,方法是保留不应使用不同名称托管的 npm 包,例如 ,B-temp然后在 CI 上,在发布期间,在发布到 npm 之前最后一秒将它们重命名为B.
这样,在本地yarn/npm i调用期间,本地 monorepo 包B-temp将不会被识别,因此不会被提升。将从互联网yarn获取。B我可以保留b-tempESM ("type": "module"在 package.json 中设置),然后用于esbuild转换为 esnext-spec CJS(不转换为 ES5 等),然后将这些dist/*.cjs.js构建发布到 npm \xe2\x80\x94,除非在发布之前编辑 package.json,删除“ESM-ness”\xe2\x80\x94"type": "module"和exports.
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |