UNPKG

rigger-cli

Version:

脚手架工具,用于初始化项目

149 lines (134 loc) 4.63 kB
var path = require('path') var config = require('../config') var utils = require('./utils') var webpack = require('webpack') var merge = require('webpack-merge') var baseWebpackConfig = require('./webpack.base.conf') var ExtractTextPlugin = require('extract-text-webpack-plugin') var HtmlWebpackPlugin = require('html-webpack-plugin') var InertToHTMLPlugin = require('./webpack.plugin.insertToHtml') var EnvName = process.env.ENV_NAME; // 环境名称,如: prd | stg | dev ... var isOnline = process.env.ENV_ONLINE; // 是否为在线模式,默认为false var env = process.env.NODE_ENV === 'testing' ? require('../config/test.env') : config.build.env var glob = require('glob'); var path = require('path'); var webpackConfig = merge(baseWebpackConfig, { module: { loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) }, devtool: config.build.productionSourceMap ? '#source-map' : false, output: { path: config.build.assetsRoot, filename: utils.assetsPath('js/[name].js'), chunkFilename: utils.assetsPath('js/[id].js') }, resolve: { 'aladdin-ibank': path.resolve(__dirname, '../config/prod.env.js') }, vue: { loaders: utils.cssLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) }, plugins: [ new InertToHTMLPlugin({ paths: [utils.assetsPath('js/config/' + EnvName +'.js')] }), // http://vuejs.github.io/vue-loader/workflow/production.html new webpack.DefinePlugin({ 'process.env': env }), new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }), new webpack.optimize.OccurenceOrderPlugin(), // extract css into its own file new ExtractTextPlugin(utils.assetsPath('css/[name].css')), // generate dist index.html with correct asset hash for caching. // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin // new HtmlWebpackPlugin({ // filename: process.env.NODE_ENV === 'testing' // ? 'index.html' // : config.build.index, // template: 'index.html', // inject: true, // minify: { // removeComments: true, // collapseWhitespace: true, // removeAttributeQuotes: true // // more options: // // https://github.com/kangax/html-minifier#options-quick-reference // }, // // necessary to consistently work with multiple chunks via CommonsChunkPlugin // chunksSortMode: 'dependency' // }), // split vendor js into its own file new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', minChunks: function (module, count) { // any required modules inside node_modules are extracted to vendor return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }), // extract webpack runtime and module manifest to its own file in order to // prevent vendor hash from being updated whenever app bundle is updated // new webpack.optimize.CommonsChunkPlugin({ // name: 'manifest', // chunks: ['vendor'] // }) ] }) if (config.build.productionGzip) { var CompressionWebpackPlugin = require('compression-webpack-plugin') webpackConfig.plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }) ) } // var pages = getEntry('./src/module/**/*.html'); var pages = webpackConfig.entry; for (var pathname in pages) { // 配置生成的html文件,定义路径等 var conf = { filename: pathname + '.html', // template: pages[pathname], // 模板路径 template: './index.html', // 模板路径 inject: true, // js插入位置 minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true // more options: // https://github.com/kangax/html-minifier#options-quick-reference }, // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency' }; if (/^module\//.test(pathname)) { conf.chunks = ['manifest', 'vendor', 'app', pathname]; // conf.hash = true; webpackConfig.plugins.push(new HtmlWebpackPlugin(conf)); } } module.exports = webpackConfig;