jos*_*unt 22 npm npm-install npm-workspaces
使用npm 工作区我有一个像这样的文件夹结构
+-- package.json
+-- package-lock.json
+-- client
| `-- package.json
+-- shared
| `-- package.json
`-- server
`-- package.json
Run Code Online (Sandbox Code Playgroud)
通常,当为 Nodejs 应用程序创建生产版本时,我会运行npm ci --only=production然后复制node_modules到构建工件中。我不确定在使用工作区时如何做类似的事情。
如果我运行npm ci --only=production --workspace server它会将依赖项拆分为./node_modules和./server/node_modules。也许我应该复制(合并?)两者node_modules到构建工件中?
另一种选择可能是将./package-lock.json和复制./server/package.json到一个新目录中并运行npm ci --only=production. 它似乎确实有效,但我对 npm 的了解不够,不知道这是否是一个好主意。
要求是:
node_modules应该只包含所选包的生产依赖项package-lock.json。mor*_*ney -1
install我会使用配置选项的组合。
使用 Node v18.16.0 和 npm v9.7.2 的输出是npm install --help(需要 npm >= v9.7.2 才能正确省略开发依赖项):
$ npm install --help
Install a package
Usage:
npm install [<package-spec> ...]
Options:
[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle]
[-E|--save-exact] [-g|--global]
[--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
[--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
[--strict-peer-deps] [--no-package-lock] [--foreground-scripts]
[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run]
[-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
[-ws|--workspaces] [--include-workspace-root] [--install-links]
aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall
Run "npm help install" for more info
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我建议结合使用
install-strategy( nested)omit( dev)workspace( server)因此,从工作区根目录开始:
npm install --install-strategy=nested --omit=dev --workspace=server
Run Code Online (Sandbox Code Playgroud)
您可能需要也可能不需要-install-strategy。
这应该node_modules在工作区的根目录中留下一个目录,其中仅包含server工作区的 package.json 文件中定义的依赖项,并devDependencies省略中定义的依赖项。您也可以从工作区中--omit=peer删除。peerDependenciesserver
注意:根据您的依赖关系图,这仍然可能会留下多个node_modules需要组合来创建工件的目录,即--install-strategy=nested对于 npm 工作区似乎无法正常工作。但是,已安装的 deps 应正确隔离到传入的工作区--workspace。下面是一个示例存储库,展示了如何组合这些依赖项。