2016-11-20 188 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' 
      ] 
     } 
    ] 
},