@vant/cli
Version:
Vant CLI is a tool for building vue component library. You can quickly build a full-featured Vue component library with vant-cli.
49 lines (48 loc) • 1.78 kB
JavaScript
import fse from 'fs-extra';
import babel from '@babel/core';
import esbuild from 'esbuild';
import { sep } from 'node:path';
import { isJsx, replaceExt, getVantConfig } from '../common/index.js';
import { replaceCSSImportExt } from '../common/css.js';
import { replaceScriptImportExt } from './get-deps.js';
const { readFileSync, removeSync, outputFileSync } = fse;
export async function compileScript(filePath, format) {
var _a;
if (filePath.includes('.d.ts')) {
return;
}
const extensionMap = (_a = getVantConfig().build) === null || _a === void 0 ? void 0 : _a.extensions;
const extension = (extensionMap === null || extensionMap === void 0 ? void 0 : extensionMap[format]) || '.js';
let code = readFileSync(filePath, 'utf-8');
if (!filePath.includes(`${sep}style${sep}`)) {
code = replaceCSSImportExt(code);
}
code = replaceScriptImportExt(code, filePath, extension);
if (isJsx(filePath)) {
const babelResult = await babel.transformAsync(code, {
filename: filePath,
babelrc: false,
presets: ['@babel/preset-typescript'],
plugins: [
[
'@vue/babel-plugin-jsx',
{
enableObjectSlots: false,
},
],
],
});
if (babelResult === null || babelResult === void 0 ? void 0 : babelResult.code) {
({ code } = babelResult);
}
}
const esbuildResult = await esbuild.transform(code, {
loader: 'ts',
target: 'es2016',
format,
});
({ code } = esbuildResult);
const jsFilePath = replaceExt(filePath, extension);
removeSync(filePath);
outputFileSync(jsFilePath, code);
}