在使用 Rush 管理的 JavaScript monorepo 中,我有三个项目:
backend/
frontend/
shared/
在backend/package.json
和frontend/package.json
中,shared
项目被声明为依赖项:
"dependencies": {
"shared": "0.0.0",
在当地环境中,一切都很好,这要归功于 Rush,它为我运行npm link
。
现在我需要发布。
在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
。
有没有优雅的解决方案?
尝试指定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 install
或rush update
来处理更改。
如果这不起作用,请先尝试使用npm install --save
保存共享包。
如果这不起作用,捆绑依赖项可能是答案。今晚我将建立一个测试项目,以便稍后尝试和更新,但这可能会让你更快地上路。