@beisen/ethos
Version:
beisencloud pc react components
151 lines (137 loc) • 4.49 kB
JavaScript
/**
* Created by liubo on 15/8/12.
*/
var webpack = require("webpack");
var path = require("path");
var root = path.join(process.cwd(), "./"); //根目录
var node_modules = path.join(root,'./node_modules');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var WrapperPlugin = require('@beisen/wrapper-webpack-plugin');
var Visualizer = require('webpack-visualizer-plugin');
let CodeSplitWebpackPlugin = require('@beisen/code-split-component/webpack');
// var CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
// var VersionPlugin = require('@beisen/versionplugin');
module.exports = function(options) {
//入口
var entry = options.entry;
//压缩css
var ExtractTextPluginConfig = (options.minimize)?
new ExtractTextPlugin("css/[name]-[chunkhash].min.css",{disable: false,allChunks: true}):
new ExtractTextPlugin("css/[name].css",{disable: false,allChunks: true});
var output = {
library: "@beisen/ethos",
libraryTarget: "umd",
path: path.resolve(root, "./dist/"),
filename: (options.minimize)? "[name]-[chunkhash].bundle.min.js" : "[name].bundle.js",
sourceMapFilename: (options.minimize)? "[name]-[chunkhash].bundle.min.js.map": "[name].bundle.js.map"
};
var alias = {
// "rc-util": node_modules + '/@beisen/DateTime/src/rc-util/lib/index.js',
// "classnames" : node_modules + '/classnames/index'
//, "redux-async-connect": nodeRoot + "/@beisen/talent-core/libs/libs/redux-async-connect/index.js"
};
//加载器
var loaders = [
{
test: /\.js[x]?$/
,loader: 'babel'
, exclude: /(node_modules|bower_components)/
},
{
test: /\.css$/, loader: ExtractTextPlugin.extract(
"style-loader",
"css-loader?sourceMap",
{
publicPath: "../"
}
)},
{
test: /\.scss$/, loader: ExtractTextPlugin.extract(
"style-loader",
"css-loader!sass-loader",
{
publicPath: "../"
}
)},
{
test: /\.(ttf|eot|svg|woff(2)?)(\?[^('|")]*)?$/,
loader: "file-loader?name=images/[hash:8].[name].[ext]"
},
{
test: /\.(png|jpg|gif)$/,
loader: "file-loader?name=images/[hash:8].[name].[ext]"
}
];
var DefinePluginConfig = !options.minimize? {
__CLIENT__: true,
__SERVER__: false,
__DEVELOPMENT__: true,
__DEVTOOLS__: false
} : {
__DEVELOPMENT__: false,
'process.env': {
// Useful to reduce the size of client-side libraries, e.g. react
NODE_ENV: JSON.stringify('production')
}
}
//插件
var plugins = [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.DefinePlugin(DefinePluginConfig),
ExtractTextPluginConfig,
new Visualizer({
filename: '../statistics.html'
})
// new VersionPlugin()
// new CaseSensitivePathsPlugin()
];
// if(options.wrap) {
// plugins.push(
// new WrapperPlugin({
// header: 'window.__preloadEthos = function(root) {',
// footer: '\n};window.__preloadEthos(this);'
// })
// )
// }
plugins.push(new CodeSplitWebpackPlugin());
if (options.minimize){
plugins.push(
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
,sourceMap: true
,mangle: {
except: ['$', 'm', 'webpackJsonpCallback']
}
})
)
}
// 使用webpack打包优化插件
var WebpackCompilePlugin = require('@beisen/webpack-compile-plugin');
plugins.push(new WebpackCompilePlugin({ 'singler': 'ETHOS' }));
var config = {
entry: entry
,output: output
,module: {
loaders: loaders
,preLoaders: [
{ test: /\.js$/, loader: "strip-loader?strip[]=alert,strip[]=debug,strip[]=console.log,strip[]=console.info" }
]
}
,plugins: plugins
,resolve: {
alias: alias
,extensions: ['', '.json', '.webpack.js', '.web.js', '.js', '.jsx']
}
,externals: options.externals || {}
,devtool: options.devtool
,node : {
fs : "empty"
}
}
var compile = webpack(config);
compile.run(function(){ });
return config;
}