Angular 6 和业力'无法加载“@angular-devkit/build-angular”,它未注册'

Posted

技术标签:

【中文标题】Angular 6 和业力\'无法加载“@angular-devkit/build-angular”,它未注册\'【英文标题】:Angular 6 and karma 'Can not load "@angular-devkit/build-angular", it is not registered'Angular 6 和业力'无法加载“@angular-devkit/build-angular”,它未注册' 【发布时间】:2018-09-24 16:03:01 【问题描述】:

我不得不迁移到最新的 Angular 版本。在那之后,业力测试停止工作,并继续显示错误日志:

14 04 2018 14:17:00.453:ERROR [preprocess]: Can not load "@angular-devkit/build-angular",它没有注册! 也许您缺少一些插件?

...\parkandrest-ui\node_modules\@angular-devkit\build-angular\src\angular-cli-files\plugins\packages\angular_devkit\build_angular\src\angular-cli-files\plugins\karma。 TS:52 常量选项 = config.buildWebpack.options; ^ 类型错误:无法读取未定义的属性“选项” 在初始化(...\parkandrest-ui\node_modules\@angular-devkit\build-angular\src\angular-cli-files\plugins\packages\angular_devkit\build_angular\src\angular-cli-files\plugins\karma. ts:52:39) 在 Array.invoke (...\parkandrest-ui\node_modules\di\lib\injector.js:75:15) 在 Injector.get (...\parkandrest-ui\node_modules\di\lib\injector.js:48:43) 在 E:\Workspace\Training\spring-boot-tutorial\parkandrest-ui\node_modules\karma\lib\server.js:166:20 在 Array.forEach () 在 Server._start (...\parkandrest-ui\node_modules\karma\lib\server.js:165:21) 在 Injector.invoke (...\parkandrest-ui\node_modules\di\lib\injector.js:75:15) 在 Server.start (...\parkandrest-ui\node_modules\karma\lib\server.js:126:18) 在对象处。

我的 karma.conf.js 文件如下所示:

module.exports = function (config) 
  config.set(
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma')
    ],
    client:
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    ,
    files: [
       pattern: './src/test.ts', watched: false 
    ],
    preprocessors: 
      './src/test.ts': ['@angular-devkit/build-angular']
    ,
    mime: 
      'text/x-typescript': ['ts','tsx']
    ,
    coverageIstanbulReporter: 
      dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    ,
    angularCli: 
      config: './angular.json',
      environment: 'dev'
    ,
    reporters: config.angularCli && config.angularCli.codeCoverage
              ? ['progress', 'coverage-istanbul']
              : ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  );
;

@angular-devkit\build-angular 当然已安装。我很感激任何帮助。

编辑: 我有一个解决方案,它实际上结合了大多数用户对我的问题的回答和我自己的回答。首先,我将整个项目更新为稳定的 Angular 6 版本。接下来,我像@R.Richards 建议的那样生成了空项目,然后我用新项目替换了旧项目中的几乎所有配置。最后,我遇到了@Suvendu 警告我的问题。我使用他的解决方案来解决它。不幸的是,我的环境(Intellij IDEA 2017.3.4 Ultimate)仍然存在一个问题,它不允许我直接从我的 IDE 开始业力测试(我遇到了@Suvendu 提到的相同错误),但是,这是一个主题下一个问题。

【问题讨论】:

我刚刚通过全新安装的新 CLI (6.0.0-rc.4) 和 Angular (6.0.0-rc.5) 进行了尝试。测试运行没有问题。也许你应该从一个新的应用程序(你在旁边创建的)中获取一个 karma.config.js,看看它是否适合你。 【参考方案1】:

我的解决方案有点不同,因为我必须移动 karma.conf.js。

    更新所有依赖项并确保应用程序本身按预期工作 如果尚未完成:将 karma.conf.js 中出现的每个 @angular/cli 替换为 @angular-devkit/build-angular 从 karma.conf.js 中完全删除 filespreprocessor 配置。这都是在 angular.json 中定义的,应该由@anguler-devkit karma 插件自动处理。

【讨论】:

在更改为 @angular-devkit 后必须删除预处理器行...谢谢 @hugo der hungrige 我面临报道问题。正如我的项目覆盖范围没有显示所有文件。你能帮他理解为什么会这样吗? ***.com/questions/62152730/…【参考方案2】:

找不到模块“@angular-devkit/build-angular”

这对我的项目有用:

    npm install -g @angular/cli npm install @angular/cli ng update @angular/cli --migrate-only --from=1.7.0 ng 更新@angular/core npm install rxjs-compat ng 服务

我希望这对你有用!

【讨论】:

【参考方案3】:

我关注this guide 对项目进行了干净迁移,这为我解决了同样的问题。

【讨论】:

【参考方案4】:

尝试使用 npm 安装 karma-webpack,然后将其添加到插件数组中 -

 plugins: [
  ...
  require('karma-webpack'),
  ...
],

并用这个替换预处理器-

preprocessors: 
  './src/test.ts': ['webpack']
,

这适用于我的情况,也适用于以下预期的未来错误-

错误:'@angular-devkit/build-angular/plugins/karma' karma 插件应该在 Angular CLI 中使用,在它之外无法正常工作。

希望这会有所帮助。

【讨论】:

【参考方案5】:

我的解决方案是将我的 NODE_ENV 环境变量设置为“生产”。在尝试升级到 Angular 6 时,我没有意识到 @angular-devkit/build-angular 已列在我的 devDependencies 中,它们未安装在生产环境中。

运行“unset NODE_ENV”并从 /etc/environment 中删除 NODE_ENV 解决了我的问题。 (注意:在实际生产环境中更改此变量时要小心)。

【讨论】:

【参考方案6】:

在您的 karma.conf.js 插件部分添加以下库。这是在 Angular8 中完成的。

require('@angular-devkit/build-angular/plugins/karma')

【讨论】:

以上是关于Angular 6 和业力'无法加载“@angular-devkit/build-angular”,它未注册'的主要内容,如果未能解决你的问题,请参考以下文章

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

无法使用 chrome-headless 在 docker 中运行 angular-cli 业力测试

使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”

Angular 2 业力设置问题——业力启动但不运行测试

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

测试可观察对象 Angular 2 业力