2016-11-20 186 views
0

Angular2(2.0.1)&的WebPack 2(2.1.0-beta.21)NO的问题,我可以WO任何问题,督促...Angular2(2.2.0)的WebPack 2(2.1.0-beta.21)编译问题运行编译:督促

当我升级Angular2到最新版本(2.0.1),

NPM运行构建// =>没有错误

但是,

:执行NOM运行构建

NPM运行编译:// PROD =>我得到一个错误

Failed to exec build:prod script.. 
.... `del-cli public/js/app && ngc -p tsconfig.aot.json && ngc -p 
tsconfig.aot.json && webpack --config webpack.config.prod.js --progress 
--profile --bail && del-cli 'public/js/app/**/*.js' 
'public/js/app/**/*.js.map' '!public/js/app/bundle.js' 
'!public/js/app/*.chunk.js' 'assets/app/**/*.ngfactory.ts' 
'assets/app/**/*.shim.ts'` 

在我的package.json唯一的变化是:

.... 
"dependencies": { 
"@angular/common": "2.2.0", 
"@angular/compiler": "2.2.0", 
"@angular/compiler-cli": "2.2.0", 
"@angular/core": "2.2.0", 
"@angular/forms": "2.2.0", 
"@angular/http": "2.2.0", 
"@angular/platform-browser": "2.2.0", 
"@angular/platform-browser-dynamic": "2.2.0", 
"@angular/platform-server": "2.2.0", 
"@angular/router": "3.2.0", 
"@angular/upgrade": "2.2.0", 
.... 

# not changed 

"devDependencies": { 
"@types/core-js": "^0.9.34", 
"@types/node": "^6.0.45", 
"angular2-router-loader": "^0.3.2", 
"angular2-template-loader": "^0.5.0", 
"awesome-typescript-loader": "^2.2.4", 
"del-cli": "^0.2.0", 
"html-loader": "^0.4.4", 
"raw-loader": "^0.5.1", 
"typescript": "^2.0.3", 
"webpack": "^2.1.0-beta.21", 
"webpack-merge": "^0.14.1" 

}

网络pack.config.common.js

var webpack = require('webpack'); 

module.exports = { 
entry: { 
    'app': './assets/app/main.ts' 
}, 

resolve: { 
    extensions: ['.js', '.ts'] 
}, 

module: { 
    loaders: [ 
     { 
      test: /\.ts$/, 
      loaders: [ 
       'awesome-typescript-loader', 
       'angular2-template-loader', 
       'angular2-router-loader' 
      ] 
     }, 
     { 
      test: /\.html$/, 
      loader: 'html-loader' 
     }, 
     { 
      test: /\.css$/, 
      loader: 'raw-loader' 
     } 
    ] 
}, 

plugins: [ 
    new webpack.ContextReplacementPlugin(
     // The (\\|\/) piece accounts for path separators in *nix and Windows 
     /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, 
     './src' // location of your src 
    ) 
    ] 
}; 

网络包。 config.prod.js

var webpack = require('webpack'); 
var webpackMerge = require('webpack-merge'); 
var commonConfig = require('./webpack.config.common.js'); 

module.exports = webpackMerge.smart(commonConfig, { 
entry: { 
    'app': './assets/app/main.aot.ts' 
}, 

output: { 
    path: './public/js/app', 
    filename: 'bundle.js', 
    publicPath: '/js/app/', 
    chunkFilename: '[id].[hash].chunk.js' 
}, 

module: { 
    loaders: [ 
     { 
      test: /\.ts$/, 
      loaders: [ 
       'awesome-typescript-loader', 
       'angular2-template-loader', 
       'angular2-router-loader?aot=true&genDir=public/js/app' 
      ] 
     } 
    ] 
}, 

plugins: [ 
    new webpack.NoErrorsPlugin(), 
    new webpack.optimize.UglifyJsPlugin({ 
     sourceMap: false 
    }) 
    ] 
}); 

tsconfig.aot.json

{ 
"compilerOptions": { 
"target": "es5", 
"module": "es2015", 
"moduleResolution": "node", 
"sourceMap": true, 
"emitDecoratorMetadata": true, 
"experimentalDecorators": true, 
"removeComments": false, 
"noImplicitAny": false, 
"outDir": "./public/js/app" 
}, 
"exclude": [ 
"node_modules", 
"dist", 
"assets/app/polyfills.ts" 
], 

"angularCompilerOptions": { 
"skipMetadataEmit" : true 
} 

}

回答

1

问题是使用最新@angular升高,@角编译器,和@角/编译-CLI(版本2.2.0)和网络组(版本2.1.0-beta.21) ...我也有最新版本2.2.1/2.1.0.beta.27测试...

生产脚本

,运行在该目录中.ngFactorytsconfig.aot.json

(outDir: " ./public/js/app" 

具有相同的目录结构连接在一起指定

ngc -p tsconfig.aot.json 

编译输出我项目(/资产/应用/ ...,所以要由网络包所使用的最终路径将是

./public/js/app/assets/app/.. 

这个路径需要通过的WebPack装载机(genDir参数)知道......所以在我的 webpack.confid.prod.js我需要声明它:

module: { 
    loaders: [ 
     { 
      test: /\.ts$/, 
      loaders: [ 
       'awesome-typescript-loader', 
       'angular2-template-loader', 
       'angular2-router-loader?aot=true&genDir=public/js/app/assets/app' 
      ] 
     } 
    ] 
},