@molejs/mole-tools
Version:
Configuration and scripts for Mole App.
135 lines (130 loc) • 3.79 kB
JavaScript
var fs = require('fs');
var webpack = require('webpack')
// var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
// var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
var path = require('path');
var merge = require('webpack-merge');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
const OptimizeJsPlugin = require("optimize-js-plugin");
// var WebpackShellPlugin = require('webpack-shell-plugin');
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin');
// var UglifyJsParallelPlugin = require('webpack-uglify-parallel');
// var HtmlWebpackPlugin = require('html-webpack-plugin');
var os = require('os');
var utils = require('./utils')
var baseWebpackConfig = require('./base.conf');
module.exports = function(params){
//入口文件配置
var entry = utils.getEntryAliasList(params);
const webpackConfig = merge(baseWebpackConfig(params), {
//页面入口文件配置
entry: entry,
externals: {
moment:{
commonjs: "moment",
amd: "moment",
root: "moment",
},
fastclick:{
commonjs: "fastclick",
amd: "fastclick",
root: "FastClick",
},
'object-path':{
commonjs: "object-path",
amd: "object-path",
root: "objectPath",
},
Vue: "Vue",
// lodash:{
// commonjs: "lodash",
// amd: "lodash",
// root: "_",
// },
upaas:{
commonjs: "upaas",
amd: "upaas",
root: "UPAAS",
},
},
module: {
rules: [
{
test: /\.(ts|tsx)$/,
use: [
{
loader: require.resolve('ts-loader'),
options: {
// disable type checker - we will use it in fork plugin
transpileOnly: true,
},
},
],
},
{
test: /\.(js|jsx)$/,
use: [
{
loader: 'keep-loader',
options:{
keep:params.env.isBuildBeta ? "beta" : "official",
}
},
{
loader: 'babel-loader',
options:{
cacheDirectory:!params.env.isProduction,
},
}
],
include: [params.source, path.resolve(params.root, './node_modules/@beisen/bsapp-fetch'), path.resolve(params.root, './node_modules/@beisen/bsapp-bssdk'), path.resolve(params.root, './node_modules/vue-echarts-v3/src')]
},{
test:/\.less$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [{
loader:'css-loader',
},
{
loader:'postcss-loader',
},
'less-loader'
],
}),
},{
test:/\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: ['css-loader'],
}),
}]
},
plugins: [
// new WebpackShellPlugin({
// onBuildExit: ['node ./bin/build-prod-assets.js'],
// }),
new OptimizeJsPlugin({
sourceMap: false
}),
// new webpack.optimize.ModuleConcatenationPlugin(),
new LodashModuleReplacementPlugin(),
]
});
if (params.isUglifyJs) {
webpackConfig.plugins.unshift(
new webpack.optimize.UglifyJsPlugin({
output: {
comments: false, // remove all comments
},
compress: {
warnings: false,
drop_debugger: true,
drop_console: true,
},
sourceMap: false
})
);
}
return webpackConfig;
}