nobuilder-json
Version:
nobuilder
73 lines (59 loc) • 1.99 kB
JavaScript
// 设置 ENV
process.env.NODE_ENV = "development";
process.env.BABEL_ENV = "development";
// 保证 unhandle process 能抛出异常
process.on("unhandledRejection", err => {
throw err;
});
// 加载环境变量
require("./lib/env");
const fs = require("fs-extra");
const path = require("path");
const babel = require("babel-core");
const assert = require("assert");
const glob = require("glob");
const chalk = require("chalk");
const { rmdir, mkdir } = require("./utils");
const babelConfig = require("./lib/babelConfig");
const ES_PATTERN = /\.(js|jsx|mjs|tsx)$/;
async function run(basedir, customFiles) {
const srcDir = path.join(basedir, "src");
const destDir = path.join(basedir, "lib");
assert(fs.existsSync(srcDir), `${srcDir} directory should exists`);
console.log(chalk.cyan("Starting to transform src files to lib ...\n"));
if (!customFiles) {
// remove old destDir
console.log(" - %s %s", chalk.yellow("remove"), destDir);
await rmdir(destDir);
await mkdir(destDir);
}
// transform
const files =
customFiles ||
glob.sync("**/*.*", {
cwd: srcDir
});
for (let file of files) {
if (file.startsWith(`${srcDir}/`)) {
file = file.replace(`${srcDir}/`, "");
}
const srcFile = path.resolve(srcDir, file);
let destFile = path.resolve(destDir, file);
// 如果是 ES 代码, 就 transform
if (file.match(ES_PATTERN)) {
console.log(" - %s %s", chalk.green("transform"), file);
destFile = destFile.replace(ES_PATTERN, ".tsx");
const content = fs.readFileSync(srcFile, "utf8");
await mkdir(path.dirname(destFile));
fs.writeFileSync(
destFile.replace(".tsx", ".js"),
babel.transform(content, { ...babelConfig, filename: destFile }).code
);
} else {
console.log(" - %s %s", chalk.green("copy"), file);
await fs.copy(srcFile, destFile);
}
}
console.log(chalk.green("\nTransform successfully!"));
}
module.exports = run;