...
|
...
|
@@ -5,39 +5,81 @@ |
|
|
*/
|
|
|
|
|
|
'use strict';
|
|
|
const _ = require('lodash');
|
|
|
const os = require('os');
|
|
|
const path = require('path');
|
|
|
const scss = require('postcss-scss');
|
|
|
const shelljs = require('shelljs');
|
|
|
const _ = require('lodash');
|
|
|
const webpack = require('webpack');
|
|
|
const HappyPack = require('happypack');
|
|
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
|
|
const scss = require('postcss-scss');
|
|
|
const postcssConfig = require('./postcss.config.js');
|
|
|
const entries = {
|
|
|
index: path.join(__dirname, '../scss/index.css'),
|
|
|
common: path.join(__dirname, '../scss/common.css'),
|
|
|
feature: path.join(__dirname, '../scss/feature.css')
|
|
|
|
|
|
const hbsLoader = {
|
|
|
loader: 'handlebars-loader',
|
|
|
options: {
|
|
|
helperDirs: [
|
|
|
path.join(__dirname, '../js/common/helpers')
|
|
|
],
|
|
|
partialDirs: [
|
|
|
path.join(__dirname, '../../doraemon/views/partial')
|
|
|
]
|
|
|
}
|
|
|
};
|
|
|
|
|
|
const cssLoader = (env, type) => {
|
|
|
let loaders = [{
|
|
|
loader: 'css-loader',
|
|
|
options: {
|
|
|
url: false,
|
|
|
sourceMap: env === 'dev'
|
|
|
}
|
|
|
}];
|
|
|
|
|
|
if (type === 'css') {
|
|
|
loaders.push({
|
|
|
loader: 'postcss-loader',
|
|
|
options: {
|
|
|
plugins: postcssConfig.postcssPlugin(env),
|
|
|
parser: scss
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (env === 'dev') {
|
|
|
loaders.unshift({
|
|
|
loader: 'style-loader'
|
|
|
});
|
|
|
return loaders;
|
|
|
}
|
|
|
|
|
|
return ExtractTextPlugin.extract({
|
|
|
fallback: type === 'css' ? 'style-loader' : 'vue-style-loader',
|
|
|
use: loaders
|
|
|
});
|
|
|
};
|
|
|
const happyThreadPool = HappyPack.ThreadPool({ // eslint-disable-line
|
|
|
size: os.cpus().length
|
|
|
});
|
|
|
|
|
|
// 构建各模块子页面JS。生成规则module.page.js
|
|
|
shelljs.ls(path.join(__dirname, '../js/**/*.page.js')).forEach((f) => {
|
|
|
const dir = _.slice(f.split('/'), -2); // [modulename, xx.page.js]
|
|
|
const getEntries = () => {
|
|
|
const entries = {
|
|
|
libs: ['yoho-jquery'],
|
|
|
index: path.join(__dirname, '../scss/index.css'),
|
|
|
common: path.join(__dirname, '../scss/common.css'),
|
|
|
feature: path.join(__dirname, '../scss/feature.css')
|
|
|
};
|
|
|
|
|
|
// 构建各模块子页面JS。生成规则module.page.js
|
|
|
shelljs.ls(path.join(__dirname, '../js/**/*.page.js')).forEach((f) => {
|
|
|
const dir = _.slice(f.split('/'), -2); // [modulename, xx.page.js]
|
|
|
|
|
|
// Important
|
|
|
// 生成规则:module.page: './js/module/xx.page.js'
|
|
|
entries[`${dir[0]}.${dir[1].match(/(.*).page.js/)[1]}`] = path.join(__dirname, `../js/${dir.join('/')}`);
|
|
|
entries.libs = [
|
|
|
'yoho-jquery'
|
|
|
];
|
|
|
});
|
|
|
// Important
|
|
|
// 生成规则:module.page: './js/module/xx.page.js'
|
|
|
entries[`${dir[0]}.${dir[1].match(/(.*).page.js/)[1]}`] = path.join(__dirname, `../js/${dir.join('/')}`);
|
|
|
});
|
|
|
|
|
|
return entries;
|
|
|
};
|
|
|
|
|
|
module.exports = (env) => {
|
|
|
return {
|
|
|
entry: entries,
|
|
|
entry: getEntries(),
|
|
|
output: {
|
|
|
path: path.join(__dirname, 'bundle'), // absolute path
|
|
|
filename: '[name].js'
|
...
|
...
|
@@ -54,45 +96,23 @@ module.exports = (env) => { |
|
|
},
|
|
|
autoprefixer: false,
|
|
|
loaders: {
|
|
|
css: ExtractTextPlugin.extract({
|
|
|
fallback: 'vue-style-loader',
|
|
|
use: [{
|
|
|
loader: 'css-loader',
|
|
|
options: {
|
|
|
url: false
|
|
|
}
|
|
|
}]
|
|
|
})
|
|
|
css: cssLoader(env, 'vue')
|
|
|
}
|
|
|
}
|
|
|
}],
|
|
|
}, {
|
|
|
test: /\.js$/,
|
|
|
exclude: [/node_modules/],
|
|
|
use: [{
|
|
|
use: env === 'dev' ? ['babel-loader'] : [{
|
|
|
loader: 'happypack/loader?id=js'
|
|
|
}]
|
|
|
}, {
|
|
|
test: /\.css$/,
|
|
|
use: ExtractTextPlugin.extract({
|
|
|
fallback: 'style-loader',
|
|
|
use: [{
|
|
|
loader: 'css-loader',
|
|
|
options: {
|
|
|
url: false
|
|
|
}
|
|
|
}, {
|
|
|
loader: 'postcss-loader',
|
|
|
options: {
|
|
|
plugins: postcssConfig.postcssPlugin(env),
|
|
|
parser: scss
|
|
|
}
|
|
|
}],
|
|
|
})
|
|
|
use: cssLoader(env, 'css')
|
|
|
}, {
|
|
|
test: /\.hbs$/,
|
|
|
use: [{
|
|
|
loader: 'happypack/loader?id=hbs',
|
|
|
use: env === 'dev' ? [hbsLoader] : [{
|
|
|
loader: 'happypack/loader?id=hbs'
|
|
|
}]
|
|
|
}]
|
|
|
},
|
...
|
...
|
@@ -112,27 +132,6 @@ module.exports = (env) => { |
|
|
children: false
|
|
|
},
|
|
|
plugins: [
|
|
|
new HappyPack({
|
|
|
id: 'js',
|
|
|
threadPool: happyThreadPool,
|
|
|
loaders: ['babel-loader'],
|
|
|
}),
|
|
|
new HappyPack({
|
|
|
id: 'hbs',
|
|
|
threadPool: happyThreadPool,
|
|
|
loaders: [{
|
|
|
loader: 'handlebars-loader',
|
|
|
options: {
|
|
|
helperDirs: [
|
|
|
path.join(__dirname, '../js/common/helpers')
|
|
|
],
|
|
|
partialDirs: [
|
|
|
path.join(__dirname, '../../doraemon/views/partial')
|
|
|
]
|
|
|
}
|
|
|
}]
|
|
|
}),
|
|
|
new ExtractTextPlugin('[name].css'),
|
|
|
new webpack.optimize.CommonsChunkPlugin({
|
|
|
name: 'libs',
|
|
|
filename: 'libs.js'
|
...
|
...
|
@@ -142,6 +141,9 @@ module.exports = (env) => { |
|
|
jQuery: 'yoho-jquery',
|
|
|
'window.jQuery': 'yoho-jquery'
|
|
|
})
|
|
|
]
|
|
|
],
|
|
|
extends: {
|
|
|
hbsLoader
|
|
|
}
|
|
|
};
|
|
|
}; |
...
|
...
|
|