oxc-cjs2esm
v0.1.2
Published
Convert CommonJS modules to ESM modules using oxc-parser
Readme
oxc-cjs2esm
一个使用 Oxc-Parser 将 CommonJS 模块转换为 ESM 模块的轻量级工具。
安装
npm install oxc-cjs2esmyarn add oxc-cjs2esmpnpm add oxc-cjs2esm使用
import { cjs2esm } from 'oxc-cjs2esm';
const cjsCode = `
const a = require('./a.js');
module.exports = {
a: a,
};
`;
const esmCode = cjs2esm(cjsCode, { filename: 'example.js' });
console.log(esmCode);
// import a from './a.js';
//
// export default { a };API
cjs2esm(code: string, options?: TransformOptions): string
将 CommonJS 代码转换为 ESM 代码。
参数:
| 参数 | 类型 | 必填 | 说明 |
| --------- | ------------------ | ---- | ------------------------ |
| code | string | 是 | 待转换的 CommonJS 源代码 |
| options | TransformOptions | 否 | 转换选项 |
TransformOptions:
| 属性 | 类型 | 说明 |
| ---------- | -------- | ------------------------------------------- |
| filename | string | 文件名,用于解析错误提示,默认 'input.js' |
返回值: 转换后的 ESM 代码字符串。
无法转换的 CJS 语法(动态 require、空解构、计算属性导出、非字面量路径的独立 require)会触发 console.warn,并输出行号、列号和代码片段。
支持的转换
| CommonJS | ESM |
| ------------------------------------------ | --------------------------------------------------------------------------- |
| const x = require('./x.js') | import x from './x.js' |
| var x = require('./x.js') | import x from './x.js' |
| let x = require('./x.js') | import x from './x.js' |
| const { a } = require('./x.js') | import { a } from './x.js' |
| const { a, b } = require('./x.js') | import { a, b } from './x.js' |
| const { a: foo } = require('./x.js') | import { a as foo } from './x.js' |
| const { a, ...rest } = require('./x.js') | import * as __cjs2esm_0 from './x.js'; const { a, ...rest } = __cjs2esm_0 |
| const [a, b] = require('./x.js') | import * as __cjs2esm_0 from './x.js'; const [a, b] = __cjs2esm_0 |
| const { a = 1 } = require('./x.js') | import * as __cjs2esm_0 from './x.js'; const { a = 1 } = __cjs2esm_0 |
| const a = require('a'), b = require('b') | import a from 'a'; import b from 'b' |
| require('./init.js') | import './init.js' |
| module.exports = { b: require('./b.js') } | import __cjs2esm_0 from './b.js'; export default { b: __cjs2esm_0 } |
| module.exports = expr | export default expr |
| exports.foo = expr | export const foo = expr |
| module.exports.foo = expr | export const foo = expr |
限制
- 仅转换字面量路径的
require(),动态require(getPath())、模板字符串require(\./${path}`)` 保持不变 - 计算属性形式的
exports[key] = value不转换
License
MIT
