UNPKG

@aniyajs/rotor

Version:

基于webpack5开发的一款专注于打包、运行的工具

95 lines (82 loc) 2.42 kB
const browserslist = require("browserslist"); const chalk = require("chalk"); const os = require("os"); const pkgUp = require("pkg-up"); const prompts = require("prompts"); const fs = require("fs-extra"); // 默认browserslist const defaultBrowsers = { production: [">0.2%", "not dead", "not op_mini all"], development: [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version", ], }; function shouldSetBrowsers(isInteractive) { // 没有连接到终端上下文 if (!isInteractive) { return Promise.resolve(true); } const questions = [ { type: "confirm", name: "shouldSetBrowsers", message: chalk.yellow("我们找不到 browserslist 配置") + `\n\n您要将默认值添加到您的${chalk.bold("package.json")}吗?`, initial: true, }, ]; return prompts(questions).then((answer) => answer.shouldSetBrowsers); } /** * 指定browserslist配置 * * @param {string} dir 文件路径 * @param {any} isInteractive 终端上下文 * @param {*} retry * @returns */ function checkBrowsers(dir, isInteractive, retry = true) { // 检查browerslist配置是否存在 const current = browserslist.loadConfig({ path: dir }); if (current != null) { return Promise.resolve(current); } if (!retry) { return Promise.reject( new Error( chalk.red("您必须指定browserslist。") + os.EOL + `请添加${chalk.underline("browserslist")}到你的${chalk.bold( "package.json", )}文件。`, ), ); } return shouldSetBrowsers(isInteractive).then((shouldSetBrowsers) => { if (!shouldSetBrowsers) { return checkBrowsers(dir, isInteractive, false); } return ( pkgUp({ cwd: dir }) .then((filePath) => { if (!filePath) { return Promise.reject(); } const pkg = JSON.parse(fs.readFileSync(filePath)); pkg.browserslist = defaultBrowsers; fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + os.EOL); browserslist.clearCaches(); console.log(); }) // 忽略任何错误 .catch(() => {}) .then(() => checkBrowsers(dir, isInteractive, false)) ); }); } module.exports = { checkBrowsers, };