@wibetter/akfun
Version:
前端脚手架:支持Vue技术栈和react技术栈
68 lines (62 loc) • 2.37 kB
JavaScript
const ora = require('ora');
const rm = require('rimraf');
const path = require('path');
const chalk = require('chalk');
const webpack = require('webpack');
const { curConsoleTag } = require('./utils/akfunParams');
const checkVersion = require('./check-versions');
const projectConfig = require('./config/index'); // 引入当前项目配置文件
const defaultConfig = require('./config/default.config');
const deepMergeConfig = require('./utils/deepMergeConfig');
// 构建脚本:一般用于构建生产环境的代码
module.exports = function (BuildType, akfunConfig, _consoleTag) {
const consoleTag = _consoleTag || curConsoleTag;
let config = projectConfig; // 默认使用执行命令目录下的配置数据
if (akfunConfig) {
// 参数中的config配置优先级最高
config = deepMergeConfig(defaultConfig, akfunConfig);
}
let curEnvConfig = config.build;
// 检查当前npm版本号是否匹配
checkVersion();
const spinner = ora(`${consoleTag}开始构建...`).start();
// 引入生产环境配置信息
let webpackConfig;
// 根据BuildType判断是否引用专用于第三方功能包的webpack配置
if (BuildType && BuildType === 'lib') {
spinner.start(`${consoleTag}开始构建lib库...`);
webpackConfig = require('./webpack/webpack.library.conf')(config);
curEnvConfig = config.build2lib;
} else {
spinner.start(`${consoleTag}开始构建生产环境的代码...`);
webpackConfig = require('./webpack/webpack.prod.conf')(config);
}
/**
* 如果 Node 的环境无法判断当前是 dev / product 环境
* 使用 config.dev.NODE_ENV 作为当前的环境
*/
if (!process.NODE_ENV) {
process.NODE_ENV = curEnvConfig.NODE_ENV; // 将运行环境设置为生产环境
}
rm(path.join(curEnvConfig.assetsRoot, curEnvConfig.assetsSubDirectory), (err) => {
if (err) throw err;
webpack(webpackConfig, (err, stats) => {
spinner.stop();
if (err) throw err;
process.stdout.write(
`${stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
})}\n\n`
);
if (stats.hasErrors()) {
console.log(chalk.red(' 构建失败.\n'));
process.exit(1);
}
console.log(chalk.cyan(' 构建完成.\n'));
});
});
};