// 关闭 import 规则 /* eslint import/no-extraneous-dependencies: 0 */ import { transformSync } from '@babel/core'; function transform(code, options) { const result = transformSync(code, options); return result.code; } function transformNodeCode(code, config) { return transform(code, { presets: [ [ '@babel/preset-env', { modules: 'cjs', targets: { node: '16' }, }, ], ], sourceFileName: config.sourceMap ? config.sourceFileName : undefined, sourceMaps: config.sourceMap ? 'inline' : false, }); } function transformBrowserCode(code) { // 因为 fes.js 在生产打包的时候,会处理所有的 node_modules 下的文件,确保不会丢失必要 polyfill // 因此这里不对 polyfill 进行处理,避免全局污染 return transform(code, { presets: [ [ '@babel/preset-env', { modules: false, useBuiltIns: false, targets: { chrome: '51' }, }, ], ], }); } export default function compiler(code, config) { if (!config.target || config.target === 'node') return transformNodeCode(code, config); if (config.target === 'browser') return transformBrowserCode(code); throw new Error(`config target error: ${config.target}, only can use 'node' and 'browser'`); }