jarvis-react
Version:
React脚手架及命令行工具合集
69 lines (68 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.babelTransform = exports.getBabelConfig = void 0;
const core_1 = require("@babel/core");
function getBabelConfig(options) {
const { mode = 'app', buildType = 'esm', isDevelopment, isProduction } = options;
const config = {
babelrc: false,
configFile: false,
sourceType: 'unambiguous',
presets: [
[
require.resolve('@babel/preset-env'),
{
modules: buildType === 'esm' ? false : 'auto',
},
],
[
require.resolve('@babel/preset-react'),
{
runtime: 'automatic',
},
],
require.resolve('@babel/preset-typescript'),
],
plugins: [require.resolve('@babel/plugin-transform-runtime')],
};
if (mode === 'component') {
// 打包组件时需要转换引入的文件 less → css
config.plugins.push([
{
name: 'rename-less',
visitor: {
ImportDeclaration: (path) => {
if (path.node.source.value.endsWith('.less')) {
path.node.source.value = path.node.source.value.replace(/\.less$/, '.css');
}
},
},
},
]);
}
else {
if (isProduction) {
config.compact = true;
}
config.plugins.push([
require.resolve('babel-plugin-import'),
{
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
},
]);
}
if (isDevelopment) {
config.plugins.push(require.resolve('react-refresh/babel'));
}
return config;
}
exports.getBabelConfig = getBabelConfig;
function babelTransform(config, file) {
return (core_1.transform(file.contents, {
...config,
filename: file.path,
})?.code || '');
}
exports.babelTransform = babelTransform;