如果这是一篇重复的文章,我很抱歉(我用搜索工具仔细查找了但没有找到)。有人有什么想法吗,如何转译Node.js的CommonJS模块,以便它们可以在ES6的导入/导出项目中使用?
我知道有 @babel/plugin-transform-modules-commonjs 可以将ES6模块转译成CommonJS形式,但我认为我需要相反的转换。我需要这样做的原因是我有一个使用Node的module.exports
语法编写的配置文件,需要在使用ES6模块的babel构建的React项目中导入,但我遇到了Uncaught TypeError: Cannot assign to read only property 'exports' of object
错误。任何想法都将不胜感激。
这是我的babelrc.js文件:
module.exports = {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
['@babel/plugin-proposal-class-properties', { loose: true }],
['@babel/plugin-transform-runtime', { regenerator: true }],
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-optional-chaining'
],
env: {
production: {
plugins: [
[
"transform-react-remove-prop-types",
{ removeImport: true }
],
]
}
}
}
这是我的 Webpack 配置 babel loader 规则:
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
cacheDirectory: true,
cacheCompression: false,
envName: isModeProduction ? 'production' : 'development'
}
}
]
},
module-exports
替换为exports
,但这并没有解决问题(它破坏了其他东西)。然而,您指引了我正确的方向,在一些挖掘后,我发现设置babel的sourceType: ambigous
解决了这个错误。请随意复制粘贴此链接作为答案,我很乐意将其标记为已接受的答案,因为您帮助我找到了解决方案。 - sgarcia.dev