@blueking/lesscode-cli
Version:
Command Tools for Lesscode
144 lines (136 loc) • 4.71 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.plugins = exports.rules = exports.optimization = void 0;
var _path = require("path");
var _webpack = _interopRequireDefault(require("webpack"));
var _vueLoader = require("vue-loader");
var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
var _optimizeCssAssetsWebpackPlugin = _interopRequireDefault(require("optimize-css-assets-webpack-plugin"));
const pathToNodeModules = '../../../node_modules';
const optimization = {
minimizer: [new _terserWebpackPlugin.default({
terserOptions: {
compress: false,
mangle: true,
output: {
comments: false
}
},
extractComments: false,
cache: true,
parallel: true,
sourceMap: true
}), new _optimizeCssAssetsWebpackPlugin.default({
cssProcessorOptions: {
safe: true
}
})],
splitChunks: {
chunks: 'all',
minSize: 30000,
maxSize: 0,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
bkMagicVue: {
chunks: 'all',
name: 'chunk-bk-magic-vue',
priority: 5,
reuseExistingChunk: true,
test: module => /bk-magic-vue/.test(module.context)
},
twice: {
chunks: 'all',
name: 'twice',
priority: 6,
minChunks: 2
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
},
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
}
}
}
};
exports.optimization = optimization;
const rules = [{
test: /\.vue$/,
use: [{
loader: (0, _path.resolve)(__dirname, pathToNodeModules, 'vue-loader'),
options: {
transformAssetUrls: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
}]
}, {
test: /\.js$/,
use: {
loader: (0, _path.resolve)(__dirname, pathToNodeModules, 'babel-loader'),
options: {
include: [(0, _path.resolve)(__dirname, '..', 'src')],
cacheDirectory: (0, _path.resolve)(__dirname, '..', '.webpack_cache'),
exclude: file => /node_modules/.test(file) && !/\.vue\.js/.test(file),
presets: [[(0, _path.resolve)(__dirname, pathToNodeModules, '@babel/preset-env'), {
modules: 'commonjs',
targets: {
browsers: ['> 1%', 'last 2 versions', 'not ie <= 8'],
node: 'current'
},
debug: false
}], ['@vue/babel-preset-jsx']],
plugins: [(0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-transform-async-to-generator'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-transform-object-assign'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-syntax-dynamic-import'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-transform-runtime'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-transform-modules-commonjs'), [(0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-proposal-decorators'), {
legacy: true
}], (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-proposal-function-sent'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-proposal-export-namespace-from'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-proposal-numeric-separator'), (0, _path.resolve)(__dirname, pathToNodeModules, '@babel/plugin-proposal-throw-expressions'), (0, _path.resolve)(__dirname, pathToNodeModules, 'babel-plugin-add-module-exports'), [(0, _path.resolve)(__dirname, pathToNodeModules, 'component'), {
libraryName: 'element-ui',
styleLibraryName: 'theme-chalk'
}]]
}
}
}, {
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: (0, _path.resolve)(__dirname, pathToNodeModules, 'url-loader'),
options: {
esModule: false,
limit: true
}
}, {
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
use: {
loader: (0, _path.resolve)(__dirname, pathToNodeModules, 'url-loader'),
options: {
esModule: false,
limit: true
}
}
}, {
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: (0, _path.resolve)(__dirname, pathToNodeModules, 'url-loader'),
options: {
esModule: false,
limit: true
}
}
}];
exports.rules = rules;
const plugins = [new _vueLoader.VueLoaderPlugin(), new _webpack.default.LoaderOptionsPlugin({
minimize: true
}), new _webpack.default.optimize.LimitChunkCountPlugin({
maxChunks: 1
})];
exports.plugins = plugins;