使用业力和 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”的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 和 Angular 的单元测试覆盖映射损坏了吗?

解释业力单元测试时间

错误和构建失败:使用业力执行测试时

执行业力测试时出错

无法对我的 Angular 4 代码运行简单的业力测试

jHipster:业力测试通过“纱线测试”通过,但在 WebStorm 中失败