重新导出的东西在转换巴别塔代码?



我正在开发一个框架和一个打包器。打包器会用babel的@babel/preset-env预设将ES6模块代码转换为CommonJS。

对于框架,我有3个文件夹,dom,reactiveframework

framework导入domreactive的所有导出并重新导出。

一样:

export {
useState,
createEffect,
} from '../reactive/index.js'
export {
createElement,
createComponent,
convertToNode,
insert,
render
} from '../dom/index.js'

这样,当你使用这个框架的时候,你就可以从framework中导入你需要的一切了。

示例用例:

import { useState } from 'framework';
const Component = () => {
const [ count, setCount ] = useState(0);
//...rest of component...
}

但是,当我重新导出绑定的代码时,会抛出这个错误:

Uncaught TypeError: Cannot set property useState of #<Object> which has only a getter

我知道为什么会这样做(因为babel只使用getter创建导出),但我需要知道如何绕过它/正确构建我的项目。

如何解决这个问题,

  1. 切换到插件@babel/plugin-transform-modules-commonjs
  2. 在插件设置中设置loose: true

:

const { code } = babel.transformSync(beforeCode, {
plugins: [ ["@babel/plugin-transform-modules-commonjs", {
loose: true,
}] ],
});

相关内容

  • 没有找到相关文章

最新更新