Angular SSR 抱怨我的 Express API 代码中存在非 ESM 模块

问题描述 投票:0回答:1

我设置了一个 Angular SSR 项目来运行我的 Express API 作为 SSR 服务的一部分。我所有的应用程序代码都位于

/src/app
中,我所有的 API 代码都位于
/src/api
中。我的 API 代码中有一些导入到应用程序代码中,但我尝试将其限制为仅使用我的后端使用的相同类型定义(因此有像
import type {MyBackendResponse} from '../../../api/types/myBackend.ts'
这样的东西)。

当我在应用程序中运行

ng build
时,它会编译,但会出现一堆如下所示的警告:

▲ [Warning] Module 'express-session' used by 'src/api/index.ts' is not ESM

  CommonJS or AMD dependencies can cause optimization bailouts.
  For more information see: https://angular.io/guide/build#configuring-commonjs-dependencies

我确信这些模块都没有包含在浏览器代码中 - 我搜索了所有

dist/<appname>/browser
文件夹,没有提及这些库,而
server
文件夹则提及。我目前忽略了这些警告,但如果 Angular 真的因为这些警告进入我的浏览器代码包而责骂我,我真的很高兴。

我实际上是否以某种方式搞砸了我的设置,并且这些警告是准确的?或者有没有办法让 Angular 不抱怨这些文件? (注意:我不想只是关闭这些包的警告 - 如果这些包包含在浏览器包中,我希望 Angular 对我大喊大叫!我只是不在乎它是否包含在服务器端代码中。)

angular express angular-universal angular-ssr
1个回答
0
投票

修复了它(同时还有另一个问题)!

事实证明,这是由于 Angular 试图将这些依赖项捆绑到其

.mjs
服务器输出中造成的。可以通过将库添加到
projects.<appName>.architect.build.options.externalDependencies
中的
angular.json
属性来解决此问题。添加此操作会导致所有警告消失,而且作为额外的好处,我的应用程序现在实际上在服务器端运行! (之前有人抱怨对
__dirname
的引用未定义。)

© www.soinside.com 2019 - 2024. All rights reserved.