2017-02-10 65 views
0

我使用webpack.optimize.CommonsChunkPlugin生成一個額外的塊(vueCommon.js),它包含vuejs,vue-router,vue-resource ...;但是我想生成另一個像util.js.the的業務commonChunk只是在一些頁面中通過「../service/service.js'導入ajax」;構建完成後如何使用webpack拆分公共業務代碼?

問題: 每產生page.js具有service.js的代碼

簡短演示: https://github.com/wxungang/vueJs

//webpack.base.js 
 

 
"use strict"; 
 

 
var path = require('path'); 
 
var webpack = require('webpack'); 
 
var HtmlWebpackPlugin = require('html-webpack-plugin'); 
 

 
const CONFIG = require('./config'); 
 
var projectRoot = CONFIG.projectRoot || path.resolve(__dirname, '../'); 
 
var _ENV = CONFIG.env || 'dev';//prod 
 

 
module.exports = { 
 
    devtool: _ENV != 'prod' ? '#eval-source-map' : false, 
 
    context: __dirname,//http://wxungang.github.io/1104/vue 
 
    entry: { 
 
     app: path.join(projectRoot, './vue/app.js'), 
 
     page: path.join(projectRoot, './vue/page.js') 
 
    }, 
 
    output: { 
 
     path: path.join(projectRoot, './build/vue-' + _ENV), 
 
     publicPath: '',//'./build/vue-'+_ENV+'/',//path.join(__dirname, '../src/build/dev/') 
 
     filename: '[name].js', 
 
     chunkFilename: 'chunks/[name].chunk.js', 
 
     // crossOriginLoading: 'anonymous' 
 
    }, 
 
    resolve: { 
 
     alias: { 
 
      'vue$': 'vue/dist/vue.common.js', 
 
      'vue-router$': 'vue-router/dist/vue-router.common.js' 
 
     }, 
 
     modules: ["node_modules"], 
 
     mainFiles: ["index", "app"], 
 
     extensions: [".js", ".json", '.vue'] 
 
    }, 
 
    module: { 
 
     rules: [ 
 
      { 
 
       test: /\.vue$/, 
 
       loader: 'vue-loader', 
 
       options: { 
 
        loaders: { 
 
         // Since sass-loader (weirdly) has SCSS as its default parse mode, we map 
 
         // the "scss" and "sass" values for the lang attribute to the right configs here. 
 
         // other preprocessors should work out of the box, no loader config like this nessessary. 
 
         'scss': 'vue-style-loader!css-loader!sass-loader', 
 
         'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax', 
 
         'less': 'vue-style-loader!css-loader!less-loader' 
 
        } 
 
        // other vue-loader options go here 
 
       } 
 
      }, 
 
      { 
 
       test: /\.js$/, 
 
       loader: 'babel-loader', 
 
       exclude: /node_modules/ 
 
      }, 
 
      { 
 
       test: /\.less$/, 
 
       loader: "style-loader!css-loader!less-loader" 
 
      }, 
 
      { 
 
       test: /\.scss$/, 
 
       loaders: ["style-loader", "css-loader", "sass-loader"] 
 
      }, 
 
      { 
 
       test: /\.json$/, 
 
       loader: 'json-loader' 
 
      }, 
 
      { 
 
       test: /\.html$/, 
 
       loader: 'vue-html-loader' 
 
      }, 
 
      { 
 
       test: /\.(png|jpg|gif|svg)$/, 
 
       loader: 'file-loader', 
 
       options: { 
 
        name: '[name].[ext]?[hash]' 
 
       } 
 
      } 
 
     ] 
 
    }, 
 
    plugins: [ 
 
     //注入一些全局變量 
 
     new webpack.DefinePlugin({ 
 
      _ENV_: _ENV, 
 
      _VERSION_: JSON.stringify("1.0.0") 
 
     }), 
 
     new webpack.optimize.CommonsChunkPlugin({ 
 
      name: "commons", 
 
      // (the commons chunk name) 
 

 
      filename: "vueCommons.js", 
 
      // (the filename of the commons chunk) 
 

 
      // minChunks: 2, 
 
      // (Modules must be shared between 3 entries) 
 

 
      // chunks: ["pageA", "pageB"], 
 
      // (Only use these entries) 
 
      // children: true, 
 
      // async: true, 
 
     }), 
 
     //可以和entry文件聯合配置 
 
     new HtmlWebpackPlugin({ 
 
      inject: false, 
 
      title: 'vueJs of app', 
 
      filename: 'app.html', 
 
      template: '../vue/entry/template.ejs', 
 
      scripts: ['./vueCommons.js', './app.js'] 
 
     }), 
 
     new HtmlWebpackPlugin({ 
 
      inject: false, 
 
      title: 'vueJs of page', 
 
      filename: 'page.html', 
 
      template: '../vue/entry/template.ejs', 
 
      scripts: ['./vueCommons.js', './page.js'] 
 
     }) 
 
    ] 
 

 
};

+1

你能提供你的'webpack.config.js'嗎?很難想象它。 – ickyrr

+0

已更新,謝謝。 – wangping

回答

0

你怎麼使用CommonsChunkPlugin來生成vueCommon.js?

一個簡單的方法是添加一個新的wepack進入像

utils: ['../service/service.js']

那麼的WebPack插件數組中添加一個新的CommonsChunkPlugin實例這樣

new webpack.optimize.CommonsChunkPlugin('utils'),

的CommonsChunkPlugin會做通過刪除其他塊文件中的所有utils模塊並僅生成一個utils.js。

或者,您可以將現有CommonsChunkPlugin的minChunks選項設置爲一個數字,以將vue文件和utils一起打包。

+0

thanks.but如何拆分每個頁面的CSS? – wangping