mk-mobile-command
Version:
145 lines (140 loc) • 4.24 kB
JavaScript
const fs = require('fs');
const path = require('path');
const webpack = require('webpack');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const UglifyJsPlugin = require("uglifyjs-webpack-plugin")
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin")
const getClientEnvironment = require('./env');
const paths = require('./paths');
const env = getClientEnvironment();
const appPackageJson = require(paths.appPackageJson);
const appDirectory = fs.realpathSync(process.cwd());
module.exports = {
mode: 'production',
optimization: {
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
sourceMap: false
}),
new OptimizeCSSAssetsPlugin({})
]
},
entry: [
paths.appIndexJs
],
output: {
filename: appPackageJson.name + '.min.js',
path: path.join(appDirectory, "/build/prod/"),
library: "MKApp_" + appPackageJson.name.replace(/-/g, '_'),
libraryTarget: "umd"
},
resolve: {
extensions: [".js"]
},
externals: {
"react": {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react'
},
"react-dom": {
root: 'ReactDOM',
commonjs2: 'react-dom',
commonjs: 'react-dom',
amd: 'react-dom'
},
"immutable": {
root: 'Immutable',
commonjs2: 'immutable',
commonjs: 'immutable',
amd: 'immutable'
},
"moment": "moment",
"mk-mobile-sdk": "MK",
"mk-app-loader": {
root: ["MK", "appLoader"],
commonjs: "MK.appLoader",
commonjs2: "MK.appLoader",
amd: "MK.appLoader"
},
"mk-utils": {
root: ["MK", "utils"],
commonjs2: "MK.utils",
amd: "MK.utils",
commonjs: "MK.utils",
},
"mk-component": {
root: ["MK", "component"],
commonjs2: "MK.component",
amd: "MK.component",
commonjs: "MK.component"
},
"mk-meta-engine": {
commonjs: ["MK", "metaEngine"],
commonjs2: "MK.metaEngine",
amd: "MK.metaEngine",
root: "MK.metaEngine"
},
"echarts":"echarts"
},
module: {
rules: [{
test: /\.(js|jsx|mjs)$/,
include: paths.appSrc,
exclude: paths.appNodeModules,
loader: require.resolve('babel-loader'),
options: {
babelrc: false,
presets: [
'env',
'stage-2',
'react',
],
plugins: [
["transform-runtime", {
"helpers": false,
"polyfill": false,
"regenerator": true,
"moduleName": "babel-runtime"
}],
'add-module-exports',
'transform-decorators-legacy'
],
compact: true,
},
}, {
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
}, {
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
}, {
test: /\.(eot|woff|woff2|ttf|svg|png|jpe?g|gif|mp4|webm)(\?\S*)?$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]',
limit: 8192
}
}
}],
},
plugins: [
new webpack.DefinePlugin(env.stringified),
//大小写匹配
new CaseSensitivePathsPlugin(),
new MiniCssExtractPlugin({ filename: appPackageJson.name + '.min.css' })
],
node: {
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty',
}
};
;