Nrwl Nx build for production 缺少节点模块包

Posted

技术标签:

【中文标题】Nrwl Nx build for production 缺少节点模块包【英文标题】:Nrwl Nx build for production missing node modules bundle 【发布时间】:2020-07-01 12:10:48 【问题描述】:

我有一个 Nrwl Nx 存储库,其中包含不同的应用程序(角度、带有 express 的 nodejs)和内部共享库。 该存储库是使用nx cli 创建的,我想为生产构建express 应用程序之一。

nx build:production myexpressapp

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

但我非常喜欢以下任何一种:

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

查看angular.json(或workspace.json),如果您的builder@nrwl/node:build,则在options 下,将externalDependencies 设置为none,如下所示:


  "projects": 
    "api": 
      "architect": 
        "build": 
          "builder": "@nrwl/node:build",
          "options": 
            "externalDependencies": "none"
            ...

您可能会遇到如下错误:

ERROR in ...
Module not found: Error: Can't resolve 'some-modules' in ...

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

参考:Nrwl Nx Node Builder

【讨论】:

令人印象深刻!我已经在黑暗中生活了这么久。 :) 它确实有效。谢谢 为数不多的一次,我很快就得到了我需要的完美答案! 谢谢。这太难找了。 这似乎捆绑了 node_modules 中的所有内容,甚至应用程序本身不需要的东西......我正在使用 NestJS,它抱怨找不到 @nestjs/microservices,即使我不是在项目中使用它。当我安装它们时,它抱怨 grpc、mqtt、redis 和其他一堆也没有安装。我不认为我想将所有内容与应用程序捆绑在一起,只将它实际使用的模块捆绑在一起。 我已在构建目标选项 (workspace.json) 中明确指定 externalDependencies: "all",但我仍然遇到此问题。

以上是关于Nrwl Nx build for production 缺少节点模块包的主要内容,如果未能解决你的问题,请参考以下文章

为啥 nrwl/nx 比 angular@6 vanilia 更好?

如何将 NativeScript 集成到 @nrwl/nx

创建新应用程序和库时出现@nrwl/nx 错误

nrwl/nx 如何使用 npm 发布 NestJs 库?

Nrwl Nx:不同的版本号和库

在 Nrwl/Nx 工作区中包含一些库的包