3

在使用Rush管理的 JavaScript monorepo 中,我有三个项目:

  • backend/
  • frontend/
  • shared/

backend/package.jsonandfrontend/package.json中,shared项目被声明为依赖项:

  "dependencies": {
    "shared": "0.0.0",

在本地环境中,一切正常,这要归功于npm link为我运行的 Rush。

现在我需要发布。

frontend项目中,命令rushx build(如npm run build)在 webpack 的帮助下创建 JS 和 CSS 包,并将它们放在backend/目录中。

我想将该backend项目作为 npmjs 上的真实包发布。我不想shared作为一个不同的包发布,因为在发布的版本中它不再共享。内容shared已经捆绑在前端。我也想把它嵌入后端。

我试着打包它:

cd backend/
npm pack ../shared
# A new file is created: 'shared-0.0.0.tgz'

然后我编辑backend/package.json

  "dependencies": {
    "shared": "shared-0.0.0.tgz",

但之后生成的包不起作用。当我执行npm install my-published-package时,它会尝试shared-0.0.0.tgz在当前目录而不是已安装的包目录中查找。

有没有优雅的解决方案?

4

1 回答 1

0

尝试指定完整的相对路径shared-0.0.0.tgz如此处所述

  "dependencies": {
    "shared": : "file:~/some/relative/path/shared-0.0.0.tgz"

有效的相对路径可以是这样的任何东西(使用适合您的结构的任何东西):

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

然后做rush installrush update处理改变。

如果这不起作用,请尝试npm install --save先保存共享包。

如果这不起作用,则 bundledDependencies可能是答案。今晚我将建立一个测试项目,以便稍后进行尝试和更新,但这可能会让您更快上路。

于 2020-07-08T18:24:36.257 回答