Angular-cli aot build在生产模式下失败

时间:2017-05-22 19:43:19

标签: node.js angular angular-cli angular2-aot

  

子编译中的错误失败:模块构建失败:TypeError:   无法阅读属性' newLine'未定义的       at Object.getNewLineCharacter(C:... \ node_modules \ typescript \ lib \ typescript.js:9581:20)       at Object.createCompilerHost(C:... \ node_modules \ typescript \ lib \ typescript.js:66675:26)       在Object.ngcLoader(C:... \ node_modules \ @ngtools \ webpack \ src \ loader.js:386:33):TypeError:无法读取属性' newLine'未定义的

      ./src/main.ts中的错误找不到模块:错误:无法解决   ' ./$$_ gendir /应用/ app.module.ngfactory'在   ' C:\ SRC' @ ./src/main.ts   2:0-74 @ multi ./src/main.ts

     

npm ERR! Windows_NT 10.0.15063 npm ERR! argv" C:\ Program   文件\的NodeJS \ node.exe" " C:\程序   文件\的NodeJS \ node_modules \ NPM \ BIN \ NPM-cli.js" "运行" " NG" "建立"   " - " " - PROD"错误的ERR!节点v6.10.3 npm ERR! npm v3.10.10 npm ERR!   代码ELIFECYCLE npm ERR! fol-mcdean@0.1.0 ng:ng "build" "--prod"   错误的ERR!退出状态1 npm ERR!错误的ERR!失败了   fol-mcdean@0.1.0 ng script' ng" build" " - PROD"&#39 ;.错误的ERR!确保   你安装了最新版本的node.js和npm。错误的ERR!如果   你这么做,这很可能是fol-mcdean包的问题,​​npm   呃!不是与npm本身。错误的ERR!告诉作者这个失败了   你的系统:npm ERR! ng" build" " - PROD"错误的ERR!你可以得到   有关如何使用此项目打开问题的信息:npm ERR!
  npm错误关于错误!或者,如果没有,你可以得到   他们的信息来自:npm ERR! npm owner ls fol-mcdean npm ERR!有   可能是上面的额外日志输出。

     

npm ERR!请在任何支持请求中包含以下文件:   错误的ERR! C:... \ NPM-的debug.log

我有一个项目,使用@angular 4.1.3和@ angular / cli 1.1.0-rc.0(尝试1.04也有相同的结果)。所以项目建设很好 ng build --aot = true 但使用ng build --prod。

时失败并显示此错误

我对\ node_modules @ ngtools \ webpack \ src \ loader.js进行了一些调试

事实证明它在这些方面打破了:

function ngcLoader() { 
...
const sourceFileName = this.resourcePath; //here is index.ts file, I'll show it later
const plugin = this._compilation._ngToolsWebpackPluginInstance; //plugin === undefined here!
if (plugin && plugin instanceof plugin_1.AotPlugin) { //and of course this is false
...
} else {
const options = loaderUtils.getOptions(this) || {}; //and options are {} here...
...
const compilerHost = ts.createCompilerHost(compilerOptions); //and of cource it breaks here
...
}
}

它失败的文件是index.ts:

export * from './GJLog.component';

我还检查了所有软件包的所有版本,清理了缓存,重新安装了节点..一切..但在AOT模式下仍然是同样的问题。同时,它完美地编译了aot = false ...

然后我决定阅读--prod和notprod之间的区别: 并运行以下命令:

npm run ng build -- --aot=true --environment=prod --output-hashing=all --sourcemaps=false --extract-css=true

它有效!

所以,剩下就是这个:

  

- prod还设置了以下不可标记的设置:

     

1)如果在.angular-cli.json中配置,则添加服务工作者。

     

2)用生产值替换模块中的process.env.NODE_ENV(某些库需要这样做,比如反应)。

     

3)在代码上运行UglifyJS

所以我没有任何服务人员,process.env.NODE_ENV也不适用...... 这是UglifyJS吗? 不知道下一步该怎么做。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我对此问题的解决方案和调查如下: https://github.com/angular/angular-cli/issues/6426

总的来说,似乎原因在于cssnano和一个空网址(“”)。