使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”
Posted
技术标签:
【中文标题】使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”【英文标题】:Cannot read property 'externalModuleIndicator' of undefined while running unit test using karma and webpack 4 【发布时间】:2018-09-03 05:59:09 【问题描述】:使用 webpack 4 升级我的 angular 项目后,我在使用 karma 运行单元测试时遇到错误
[at-loader] 使用来自 typescript 和“tsconfig.json”的 typescript@2.7.2 来自 demo-app-app\src\tsconfig.json。
[at-loader] 在单独的进程中开始检查...
[at-loader] 检查完成,出现 1509 错误 [at-loader]:子进程处理请求失败:TypeError:Cannot 读取未定义的属性“externalModuleIndicator” 在 Object.isExternalModule (demo-app\node_modules\typescript\lib\typescript.js:13733:20) 在 Object.getAllDependencies (demo-app\node_modules\typescript\lib\typescript.js:75788:46) 在 Object.getAllDependencies (demo-app\node_modules\typescript\lib\typescript.js:76133:80) 在 进程发射 (demo-app\node_modules\awesome-typescript-loader\src\checker\runtime.ts:451:24) 在 demo-app\node_modules\awesome-typescript-loader\src\checker\runtime.ts:602:6 在 Object.send (demo-app\node_modules\awesome-typescript-loader\src\checker\runtime.ts:48:6) 在 Checker.req (demo-app\node_modules\awesome-typescript-loader\src\checker\checker.ts:100:15) 在 Checker.emitFile (demo-app\node_modules\awesome-typescript-loader\src\checker\checker.ts:105:15) 在变换 (demo-app\node_modules\awesome-typescript-loader\src\index.ts:132:26) 在转换函数 (demo-app\node_modules\awesome-typescript-loader\src\index.ts:74:40) 在编译器 (demo-app\node_modules\awesome-typescript-loader\src\index.ts:85:21) 在 Object.loader (demo-app\node_modules\awesome-typescript-loader\src\index.ts:16:12) 在 LOADER_EXECUTION (demo-app\node_modules\loader-runner\lib\LoaderRunner.js:119:14) 在 运行同步或异步 (demo-app\node_modules\loader-runner\lib\LoaderRunner.js:120:4) 在 迭代法线加载器 (demo-app\node_modules\loader-runner\lib\LoaderRunner.js:229:2) 在 迭代法线加载器 (demo-app\node_modules\loader-runner\lib\LoaderRunner.js:218:10)
136168 毫秒:标记扫描 1255.3 (1435.8) -> 1242.3 (1435.8) MB,893.2 / 0.0 ms [分配失败] [请求旧空间中的 GC]。 137084 毫秒:标记扫描 1242.3 (1435.8) -> 1242.3 (1435.8) MB,915.6 / 0.0 毫秒 [分配失败] [请求旧空间中的 GC]。 138055 毫秒: 标记扫描 1242.3 (1435.8) -> 1248.2 (1408.8) MB, 970.0 / 0.0 ms [最后 度假村 gc]。 139026 毫秒:标记扫描 1248.2 (1408.8) -> 1254.0 (1408.8) MB,971.0 / 0.0 ms [最后的 gc]。
==== JS 堆栈跟踪 ========================================== =
致命错误:CALL_AND_RETRY_LAST 分配失败 - javascript 堆 内存不足
包Json:
真棒打字稿加载器:5.0.0-0 业力-webpack:2.0.4 webpack:4.1.1
var webpack = require('webpack');
var helpers = require('./helpers');
module.exports =
devtool: 'inline-source-map',
resolve:
extensions: ['.ts', '.js']
,
mode: 'development',
module:
loaders: [
test: /\.ts$/,
loaders: ['awesome-typescript-loader', 'angular2-template-loader']
,
test: /\.html$/,
loader: 'html-loader'
,
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
loader: 'null'
,
test: /\.css$/,
include: helpers.root('src', 'app'),
loader: 'raw'
,
enforce: 'post',
test: /\.(js|ts)$/,
loader: 'istanbul-instrumenter-loader',
include: helpers.root('src'),
exclude: [
/\.(e2e|spec)\.ts$/,
/node_modules/
]
]
,
plugins: [
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core(\\|\/)@angular/,
helpers.root('./src'),
)
]
;
请注意,我可以毫无问题地运行我的 Angular 项目,只有 UT 配置会出错。
【问题讨论】:
【参考方案1】:使用“npm update”命令进行更新。它解决了我的上述错误问题。
【讨论】:
请在您的 Angular 项目的终端中运行命令“npm update”。【参考方案2】:我可以通过将awesome-typescript-loader
替换为ts-loader
来解决类似的问题
在这里有过类似的讨论
https://github.com/webpack-contrib/karma-webpack/issues/331
【讨论】:
【参考方案3】:更新到 typescript@2.8.1
可以解决“externalModuleIndicator”问题(但可能会破坏其他问题)
【讨论】:
typescript@2.8.3 和 awesome-typescript-loader@5.0.0,还是有同样的问题。 任何解决方案。我也面临同样的问题 我在 3.6.3 上,偶然发现了这个问题,它似乎无处可寻 不知何故仅在使用 Yarn PnP 时发生。真是太可惜了,我真的很想用它。【参考方案4】:对于 Yarn 用户:在终端中运行 yarn install
。
【讨论】:
以上是关于使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”的主要内容,如果未能解决你的问题,请参考以下文章