@molejs/mole-tools
Version:
Configuration and scripts for Mole App.
141 lines (130 loc) • 4.19 kB
JavaScript
var path = require('path');
var webpack = require('webpack');
var merge = require('webpack-merge');
var autoprefixer = require('autoprefixer');
var WebpackShellPlugin = require('webpack-shell-plugin')
var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var utils = require('./utils');
var vueLoaderConfig = require('./vue-loader.conf');
var getBaseConfig = require('./config');
//是否正式环境
var isProduction = process.env.NODE_ENV === 'production'
module.exports = function(params){
var config = getBaseConfig(params);
return {
output: {
//path: params.root,
filename:'[name].js',
},
resolve: {
extensions: ['.js', '.vue', '.json', '.png', '.ts', '.tsx', '.css', '.jsx', '.less'],
alias:config.alias,
},
plugins:[
new webpack.DefinePlugin({
'process.env': isProduction ? config.prod.env : config.dev.env,
'process.env.APP_STATIC_PROTOCOL': JSON.stringify(process.env.APP_STATIC_PROTOCOL || 'widget://'),
}),
new webpack.LoaderOptionsPlugin({
options: {
postcss: function () {
return [ autoprefixer ];
},
}
}),
//优化moment
new webpack.ContextReplacementPlugin(/moment[\\/]locale$/, /^\.\/(zh-cn)$/),
new ExtractTextPlugin({
filename: '[name].css',
allChunks: true,
disable: false,
}),
//优化loadash
// new LodashModuleReplacementPlugin(),
//一坨必备的插件
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new FriendlyErrorsPlugin(),
],
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: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /upaas-ui.src.*?js$/,
loader: 'babel-loader'
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: '@beisen/bsapp-file-loader',
query: {
isBsApp:true,
outputPath(url, filepath){
var p = filepath.replace(utils.resolve('.')+path.sep, '').replace('src'+path.sep, '');
var dir = path.dirname(p).replace(params.root, '');
if (filepath.indexOf('node_modules') > -1) {
return {
outputPath:'../../www/public/lib/assets',
url:'./assets/'+url,
fileName:url,
}
} else {
return {
outputPath:'../../www/' + dir,
url:'./assets/'+url,
fileName:url,
}
}
},
name: '[name].[ext]',
useRelativePath:false,
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: '@beisen/bsapp-file-loader',
query: {
isBsApp:true,
outputPath(url, filepath){
var p = filepath.replace(utils.resolve('.')+path.sep, '').replace('src'+path.sep, '');
// var dir = path.dirname(p);
var dir = path.dirname(p).replace(params.root, '');
if (filepath.indexOf('node_modules') > -1) {
return {
outputPath:'../../www/public/lib/assets',
url:'./assets/'+url,
fileName:url,
}
} else {
return {
outputPath:'../../www/' + dir,
url:url,
fileName:url,
}
}
},
name: '[name].[ext]',
useRelativePath:false,
}
}
]
}
}
}