perf(cli): simplify babel cache

This commit is contained in:
陈嘉涵
2020-01-10 11:46:30 +08:00
parent 4d86375ac6
commit f4d10df14d
6 changed files with 15 additions and 56 deletions

View File

@@ -36,7 +36,7 @@ async function compileFile(filePath: string) {
}
if (isScript(filePath)) {
return compileJs(filePath, { reloadConfig: true });
return compileJs(filePath);
}
if (isStyle(filePath)) {
@@ -153,7 +153,7 @@ async function buildPackageEntry() {
});
setModuleEnv('esmodule');
await compileJs(esEntryFile, { reloadConfig: true });
await compileJs(esEntryFile);
genPacakgeStyle({
outputPath: styleEntryFile,
@@ -162,7 +162,7 @@ async function buildPackageEntry() {
setModuleEnv('commonjs');
await copy(esEntryFile, libEntryFile);
await compileJs(libEntryFile, { reloadConfig: true });
await compileJs(libEntryFile);
await compileStyle(styleEntryFile);
stepper.success('Build Package Entry');

View File

@@ -1,49 +1,11 @@
// @ts-ignore
import findBabelConfig from 'find-babel-config';
import { join } from 'path';
import { transformFileAsync } from '@babel/core';
import { removeSync, outputFileSync, existsSync } from 'fs-extra';
import { removeSync, outputFileSync } from 'fs-extra';
import { replaceExt } from '../common';
import { ROOT, DIST_DIR } from '../common/constant';
type Options = {
// whether to fouce reload babel config
reloadConfig?: boolean;
};
const TEMP_BABEL_CONFIG = join(DIST_DIR, 'babel.config.js');
function genTempBabelConfig() {
const { config } = findBabelConfig.sync(ROOT);
const content = `module.exports = function (api) {
api.cache.never();
return ${JSON.stringify(config)}
};`;
outputFileSync(TEMP_BABEL_CONFIG, content);
}
function getBabelOptions(options: Options) {
if (options.reloadConfig) {
if (!existsSync(TEMP_BABEL_CONFIG)) {
genTempBabelConfig();
}
return {
configFile: TEMP_BABEL_CONFIG
};
}
return {};
}
export function compileJs(
filePath: string,
options: Options = {}
): Promise<undefined> {
export function compileJs(filePath: string): Promise<undefined> {
return new Promise((resolve, reject) => {
transformFileAsync(filePath, getBabelOptions(options))
transformFileAsync(filePath)
.then(result => {
if (result) {
const jsFilePath = replaceExt(filePath, '.js');

View File

@@ -1,4 +1,10 @@
module.exports = function() {
import { ConfigAPI } from '@babel/core';
module.exports = function(api?: ConfigAPI) {
if (api) {
api.cache.never();
}
const { BABEL_MODULE, NODE_ENV } = process.env;
const isTest = NODE_ENV === 'test';
const useESModules = BABEL_MODULE !== 'commonjs' && !isTest;