在将ES6导入转换为commonjs require()时,是否可以让SWC捆绑TypeScript文件?不确定是否由于我有限的理解而无法使其工作,或者是否我错过了某个选项。
基本上,我有一个入口TS文件,它通过一个简单的import convert from 'xml-js';
导入一个外部库。
module.exports = {
module: {
type: 'commonjs',
},
options: {
jsc: {
target: 'es2018',
parser: {
syntax: 'typescript',
// isModule: true,
// dynamicImport: true,
},
},
externalModules: ['xml-js'],
entry: {
'loader': __dirname + '/src/loader.ts',
},
output: {
path: __dirname + '/dist',
},
}
我希望这个包包含一个commonjs require()(由于type: 'commonjs'
),但结果却是import convert from "xml-js";
。我尝试了很多不同的配置选项,但每次尝试的结果都是一样的。
当我将Rollup与rollup-plugin-typescript 2一起使用时,它确实会导致require():var convert = require('xml-js');
这也是我期望SWC的捆绑器工作的方式。
我的感觉是SWC也应该有能力做到这一点,但我不确定如何做到。任何正确方向的暗示都非常感谢。
谢谢!
2条答案
按热度按时间4xrmg8kj1#
你当然可以。Here's the documentation from the SWC website.
你已经包含了所需的
type: "commonjs"
,但是在错误的地方。我没有使用Spack或其他配置文件,但是看起来你的文件应该这样说:对于使用
.swcrc
配置文件的用户(请记住删除注解):4ioopgfo2#
我也遇到了这个问题:当前SWC无法将commonjs的
require()
转换为esm的import
,只能将esm转换为commonjs。顺便说一句:SWC捆绑器是另一个相关的项目(目前仍处于早期阶段)。SWC是代码转发器。
我试过
esbuild
,但它仍然不支持spilingrequire
:目前可能只有
babel
可以支持:https://babeljs.io/docs/babel-plugin-transform-modules-commonjs最后,目前我的结论是,如果您想使用较新的代码转换器(如SWC/esbuild),最好使用ESM编写代码并将其转换为commonjs,否则请使用
babel
。