2019-12-02 20:57:55 +08:00

117 lines
2.6 KiB
TypeScript

import { join } from 'path';
import { clean } from './clean';
import { remove, copy, readdirSync } from 'fs-extra';
import { compileJs } from '../compiler/compile-js';
import { compileSfc } from '../compiler/compile-sfc';
import { compileStyle } from '../compiler/compile-style';
import { compilePackage } from '../compiler/compile-package';
import { genPackageEntry } from '../compiler/gen-package-entry';
import { genStyleDepsMap } from '../compiler/gen-style-deps-map';
import { genComponentStyle } from '../compiler/gen-component-style';
import { SRC_DIR, LIB_DIR, ES_DIR } from '../common/constant';
import {
logger,
isDir,
isSfc,
isStyle,
isScript,
isDemoDir,
isTestDir,
setNodeEnv,
setModuleEnv
} from '../common';
async function compileDir(dir: string) {
const files = readdirSync(dir);
await Promise.all(
files.map(filename => {
const filePath = join(dir, filename);
if (isDemoDir(filePath) || isTestDir(filePath)) {
return remove(filePath);
}
if (isDir(filePath)) {
return compileDir(filePath);
}
if (isSfc(filePath)) {
return compileSfc(filePath);
}
if (isScript(filePath)) {
return compileJs(filePath);
}
if (isStyle(filePath)) {
return compileStyle(filePath);
}
return remove(filePath);
})
);
}
async function buildESModuleOutputs() {
await copy(SRC_DIR, ES_DIR);
logger.start('Build esmodule outputs');
try {
setModuleEnv('esmodule');
await compileDir(ES_DIR);
logger.success('Build esmodule outputs');
} catch (err) {
logger.error('Build esmodule outputs');
}
}
async function buildCommonjsOutputs() {
await copy(SRC_DIR, LIB_DIR);
logger.start('Build commonjs outputs');
try {
setModuleEnv('commonjs');
await compileDir(LIB_DIR);
logger.success('Build commonjs outputs');
} catch (err) {
logger.error('Build commonjs outputs');
}
}
async function buildStyleEntry() {
logger.start('Build style entry');
try {
await genStyleDepsMap();
genComponentStyle();
logger.success('Build style entry');
} catch (err) {
logger.error('Build style entry');
}
}
async function buildPackedOutputs() {
logger.start('Build packed outputs');
try {
genPackageEntry();
await compilePackage(false);
await compilePackage(true);
logger.success('Build packed outputs');
} catch (err) {
logger.error('Build packed outputs');
}
}
export async function build() {
setNodeEnv('production');
await clean();
await buildESModuleOutputs();
await buildCommonjsOutputs();
await buildStyleEntry();
await buildPackedOutputs();
}