wci-build
Version:
A webpack scaffold
198 lines (164 loc) • 5.02 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _path = _interopRequireDefault(require("path"));
var _webpack2 = _interopRequireDefault(require("webpack"));
var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
var _fs = require("fs");
var _webpack3 = _interopRequireDefault(require("./webpack.config"));
var _config = require("./config");
/*
* @Author: jason
* @Date: 2017-11-25 09:17:35
* @Last Modified by: jason
* @Last Modified time: 2019-11-05 11:32:16
*/
var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var packagePath = 'package.json';
var files = (0, _fs.readFileSync)("".concat(_config.DEFAULT_PATH, "/").concat(packagePath));
var v = JSON.parse(files.toString()).version || 'none';
if (process.env.RUN_TEST) {
v = "".concat(v, ".release");
}
if (process.env.RUN_DEV) {
v = "".concat(v, ".dev");
}
/**
* set mode
* @type {String}
*/
_webpack3["default"].mode = 'production';
/**
* [entry description]
* @type {Object}
*/
_webpack3["default"].entry = {
app: _path["default"].resolve(_config.DEFAULT_PATH, "".concat(_config.DEFAULT_INDEX, "/"))
};
/**
* [output description]
* @type {Object}
*/
_webpack3["default"].output = {
filename: "[name].".concat(v, ".[chunkHash:8].min.js"),
chunkFilename: "[name].".concat(v, ".[chunkHash:8].min.js"),
path: _path["default"].resolve(_config.DEFAULT_PATH, _config.DEFAULT_OUTPUT),
publicPath: "https://cdn.fuliaoyi.com/" // 待抽离
};
/**
* [loader description]
* @type {String}
*/
_webpack3["default"].module.rules[0].use.push({
loader: 'eslint-loader'
});
/**
* [test description]
* @type {RegExp}
*/
_webpack3["default"].module.rules.push({
test: /\.less/,
include: _path["default"].resolve(_config.DEFAULT_PATH, _config.DEFAULT_SRC),
use: [{
loader: MiniCssExtractPlugin.loader
}, {
loader: 'css-loader',
options: {
modules: true,
importLoaders: 1,
localIdentName: '[name]_[local]_[hash:base64:3]'
}
}, {
loader: 'postcss-loader',
options: {
plugins: [(0, _autoprefixer["default"])({
broswers: ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 8', 'iOS >= 8', 'Android >= 4']
})]
}
}, {
loader: 'less-loader',
options: {
javascriptEnabled: true
}
}]
});
/**
* set develop app file-loader
* @type {RegExp}
*/
_webpack3["default"].module.rules.push({
test: /\.(png|svg|jpg|gif|eot|svg|ttf|woff)$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[hash:8].[ext]'
}
}]
});
/**
* Set up the custom loader
* @param {[type]} existsSync [description]
* @return {[type]} [description]
*/
if ((0, _fs.existsSync)("".concat(process.cwd(), "/build/wci.custom.js"))) {
var _webpack = require("".concat(process.cwd(), "/build/wci.custom.js"));
var rules = _webpack.rules;
if (rules && rules.length) {
rules.map(function (item) {
_webpack3["default"].module.rules.push({
test: item.test,
include: _path["default"].resolve(_config.DEFAULT_PATH, item.packageName),
use: [{
loader: MiniCssExtractPlugin.loader
}].concat((0, _toConsumableArray2["default"])(item.useProd))
});
});
}
}
_webpack3["default"].plugins.push(new MiniCssExtractPlugin({
filename: "[name].".concat(v, ".[hash].css"),
chunkFilename: "[name].".concat(v, ".[hash].css")
}));
/**
* [__DEV__ description]
* @type {[type]}
*/
_webpack3["default"].plugins.push(new _webpack2["default"].DefinePlugin({
__DEV__: JSON.stringify(JSON.parse(process.env.DEBUG || 'false')),
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.BUILD_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.MODULE': JSON.stringify(_config.DEFAULT_APIS),
'process.env.APPLICATION': JSON.stringify(_config.DEFAULT_APPLICATION),
// 项目配置
'process.env.VERSION': JSON.stringify(_config.DEFAULT_VERSION) // 当前版本
})); // 4.0以前版本
// config.plugins.push(new webpack.optimize.CommonsChunkPlugin({
// names: _.keys(DEFAULT_LIBS).concat(['manifest']),
// minChunks: Infinity
// }));
// 4.0以后版本 移入config
_webpack3["default"].optimization = {
splitChunks: {
chunks: "initial",
// async表示抽取异步模块,all表示对所有模块生效,initial表示对同步模块生效
cacheGroups: {
vendors: {
// 抽离第三方插件
test: /[\\/]node_modules[\\/]/,
// 指定是node_modules下的第三方包
filename: "antd.[chunkHash:8].min.js",
priority: -10 // 抽取优先级
}
}
},
runtimeChunk: {
name: 'manifest'
}
};
var _default = _webpack3["default"];
exports["default"] = _default;
module.exports = exports.default;