用于生产缺失节点模块包的 Nrwl Nx 构建

Rar*_*s P 6 express nrwl nrwl-nx

我有一个 Nrwl Nx 存储库,里面有不同的应用程序(angular、nodejs 和 express)和共享库。该存储库是用nx cli和我想为生产express应用程序之一构建的。

nx build:production myexpressapp
Run Code Online (Sandbox Code Playgroud)

我得到的包非常好,如果我从它的构建位置(dist文件夹)运行它(使用 pm2),它就会运行。但是,如果我将其投入生产,则缺少节点模块并且应用程序无法启动。如果我将 node_modules 文件夹复制到带有内置 dist 的文件夹之上,它也能正常工作。

但我非常喜欢:

  • 获得一个包含所有必需模块的大包?
  • 沿着我的主要捆绑包获得另一个“供应商”捆绑包,其中所有需要的模块都在那里?

我尝试"vendorChunk":true在我的生产构建选项中使用 ,但没有任何变化。

有什么想法吗?

Ghe*_*Ace 7

看着angular.json(或workspace.json),如果你builder@nrwl/node:build,下options,设置externalDependenciesnone,像这样:

{
  "projects": {
    "api": {
      "architect": {
        "build": {
          "builder": "@nrwl/node:build",
          "options": {
            "externalDependencies": "none"
            ...
Run Code Online (Sandbox Code Playgroud)

您可能会遇到以下错误:

ERROR in ...
Module not found: Error: Can't resolve 'some-modules' in ...
Run Code Online (Sandbox Code Playgroud)

继续安装它抱怨的东西,直到它停止。

参考:Nrwl Nx 节点生成器

  • 这似乎捆绑了node_modules中的所有内容,甚至是应用程序本身不需要的东西......我正在使用NestJS,它抱怨找不到@nestjs/microservices,即使我没有在项目中使用它。当我安装它们时,它抱怨 grpc、mqtt、redis 和其他一些也没有安装。我不认为我想将所有内容与应用程序捆绑在一起,而只想将其实际使用的模块捆绑在一起。 (3认同)