EXCEPTION:未加载运行时编译器

时间:2017-03-16 23:25:40

标签: angular angular-cli

版本。

@角/ CLI @ 1.0.0-rc.2

Repro步骤。

ng build -prod -e prod

失败给出的日志。

vendor.380a744….bundle.js:218 Error: Runtime compiler is not loaded
    at new Error (native)
    at Error.d (http://localhost:9000/portal/assets/dist/polyfills.a61f849adcea6ec74b69.bundle.js:36:1731)
    at r (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:1410:3338)
    at t.compileModuleAndAllComponentsAsync (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:1417:702)
    at e.ngOnChanges (http://localhost:9000/portal/assets/dist/main.f4b767a4fe115c7bb97e.bundle.js:1:1171229)
    at e.ngDoCheck (http://localhost:9000/portal/assets/dist/main.f4b767a4fe115c7bb97e.bundle.js:1:914180)
    at t.GGjx.t.detectChangesInternal (http://localhost:9000/portal/assets/dist/main.f4b767a4fe115c7bb97e.bundle.js:1:332790)
    at t.R2h3.t.detectChanges (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:653:5749)
    at t.Sqya.t.detectChangesInNestedViews (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:667:780)
    at t.GGjx.t.detectChangesInternal (http://localhost:9000/portal/assets/dist/main.f4b767a4fe115c7bb97e.bundle.js:1:329907)
    at t.R2h3.t.detectChanges (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:653:5749)
    at t.R2h3.t.internalDetectChanges (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:653:5542)
    at t.YSmj.t.detectChangesInternal (http://localhost:9000/portal/assets/dist/main.f4b767a4fe115c7bb97e.bundle.js:1:662563)
    at t.R2h3.t.detectChanges (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:653:5749)
    at t.Sqya.t.detectChangesInNestedViews (http://localhost:9000/portal/assets/dist/vendor.380a74466a8bf08fbdda.bundle.js:667:780)

的package.json

{
  "name": "app",
  "version": "1.0.0",
  "description": "Origianlly fomr a webpack starter for angular 2",
  "scripts": {
    "build": "ng build -dev -e dev",
    "build:aot": "ng build -prod -e prod --aot true",
    "build:prod": "ng build -prod -e prod",
    "postbuild": "node build.js",
    "postbuild:prod": "node build.js",
    "watch": "ng build -dev -w true",
    "postinstall": "typings install",
    "start": "ng serve",
    "lint": "ng lint --format stylish",
    "test": "ng test --watch false --single-run false",
    "pree2e": "webdriver-manager update --standalone false --gecko false",
    "e2e": "ng e2e",
    "prepush": "npm test && npm run lint"
  },
  "author": "Mikeumus",
  "private": true,
  "dependencies": {
    "@angular/common": "2.4.0",
    "@angular/compiler": "2.4.0",
    "@angular/core": "2.4.0",
    "@angular/flex-layout": "2.0.0-rc.1",
    "@angular/forms": "2.4.0",
    "@angular/http": "2.4.0",
    "@angular/material": "2.0.0-beta.2",
    "@angular/platform-browser": "2.4.0",
    "@angular/platform-browser-dynamic": "2.4.0",
    "@angular/router": "3.4.0",
    "@types/lodash": "4.14.50",
    "classlist.js": "^1.1.20150312",
    "core-js": "2.4.1",
    "hammerjs": "2.0.8",
    "intl": "1.2.5",
    "lodash": "4.15.0",
    "moment": "2.17.1",
    "moment-timezone": "0.5.11",
    "ng2-interceptors": "1.2.4",
    "reflect-metadata": "0.1.10",
    "rxjs": "5.1.0",
    "snapsvg": "0.5.1",
    "snapsvg-cjs": "0.0.4",
    "web-animations-js": "^2.2.2",
    "zone.js": "0.7.6"
  },
  "devDependencies": {
    "@angular/cli": "1.0.0-rc.2",
    "@angular/compiler-cli": "2.4.0",
    "@types/core-js": "0.9.37",
    "@types/jasmine": "2.5.38",
    "@types/moment-timezone": "0.2.34",
    "@types/node": "6.0.60",
    "@types/selenium-webdriver": "3.0.0",
    "@types/snapsvg": "0.4.27",
    "autoprefixer": "6.7.7",
    "codelyzer": "2.0.0",
    "husky": "0.13.2",
    "istanbul-instrumenter-loader": "0.2.0",
    "jasmine-core": "2.5.2",
    "jasmine-spec-reporter": "3.2.0",
    "karma": "1.4.1",
    "karma-cli": "1.0.1",
    "karma-coverage": "1.0.0",
    "karma-jasmine": "1.0.2",
    "karma-mocha-reporter": "2.0.3",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-remap-istanbul": "0.2.1",
    "karma-sourcemap-loader": "0.3.7",
    "karma-spec-reporter": "0.0.30",
    "protractor": "5.1.0",
    "remap-istanbul": "0.6.4",
    "ts-node": "2.1.0",
    "tslint": "4.5.1",
    "typedoc": "0.5.7",
    "typescript": "2.0.3"
  }
}

.angular-cli.json

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "project": {
    "name": "app"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "../public/dist",
      "assets": [],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.app.json",
      "testTsconfig": "tsconfig.spec.json",
      "prefix": "",
      "styles": [],
      "scripts": [],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "lint": [
    {
      "project": "src/tsconfig.app.json"
    },
    {
      "project": "src/tsconfig.spec.json"
    },
    {
      "project": "e2e/tsconfig.e2e.json"
    }
  ],
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": {
    "styleExt": "scss",
    "prefixInterfaces": false,
    "inline": {
      "style": false,
      "template": false
    },
    "spec": {
      "class": false,
      "component": true,
      "directive": true,
      "module": false,
      "pipe": true,
      "service": true
    },
    "viewEncapsulation": "Emulated",
    "changeDetection": "Default"
  }
}

我花了很多时间来确保我的应用程序与新的cli-rc2应用程序(ng new)的软件包和约定相匹配但还没有运气。很多应用都很好,我认为它是使用compiler.compileModuleAndAllComponentsAsync<any>( this.moduleType )的代码的一部分。

3 个答案:

答案 0 :(得分:2)

Loading children with a function instead of a module string path可能导致生产版本提高Runtime compiler is not loaded

为了解决该错误,请注意以下格式的loadChildren声明:

{
    path: ':id',
    component: MainComponent,
    children: [
      {
        path: '',
        loadChildren: () => SubModule
      }
    ]
  }

并将其更改为:

  {
    path: ':id',
    component: MainComponent,
    children: [
      {
        path: '',
        loadChildren: './sub-module/sub-module.module#SubModule'
      }
    ]
  }

答案 1 :(得分:2)

我在Angular 7中遇到了这个问题

Angular 7文档在这里-https://v7.angular.io/guide/lazy-loading-ngmodules#lazy-loading-feature-modules

当我使用这种方法(在Angular文档中看到)时,出现如下运行时错误:

loadChildren: './customers/customers.module#CustomersModule'

无法解析相对于app \ app.module.ts的模块

当我使用这种方法时,AOT构建将无法正常工作,并显示“未加载运行时编译器”失败:

loadChildren: () => import('./customers/customers.module').then((mod) => mod.CustomersModule)

我通过为客户目录添加tsconfig.app.json的路径来修复它,如下所示:

"@customers/*": ["app/customers/*"]

并在延迟加载时使用路径,如下所示:

loadChildren: '@customers/customers.module#CustomersModule'

答案 2 :(得分:0)

在使用代码中的compiler class进行生产构建(ng build -prod)时,@ angular / cli @ 1.0.0-rc.2会发生这种情况。

要替换compiler您想要使用&#34;动态组件创建&#34;。见SO:

相关: