babeljs - 如何在 svelte/sapper 中使用第 3 阶段语法?
问题描述
我想在我的工兵项目中使用类属性和私有字段。显然它们现在必须由 babel 进行预处理。
我尝试在rollup.config.js中添加相应的babel插件,只是实现了一些东西。
- babel rollup 插件只在 legacy 模式下使用。
- 服务器部分根本不使用 babel。
我试图将 babel rollup 插件添加到这样的服务器插件的末尾,
babel({
extensions: ['.js', '.mjs', '.html', '.svelte'],
runtimeHelpers: true,
exclude: ['node_modules/@babel/**'],
plugins: [
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-private-methods',
],
}),
但它似乎根本没有生效。
我还将它添加到客户端插件中(在遗留条目之前),但它抱怨我需要添加@babel/plugin-syntax-dynamic-import
,所以看起来 babel 必须识别整个语法才能进行预处理,我真的不想编译动态导入对于现代浏览器。
如何在 sapper 中启用 esnext 语法?
解决方案
您需要使用rollup-plugin-svelte 中<script>
的选项预处理 的内容:preprocess
plugins: [
svelte({
// ...
preprocess: {
script: ({ content }) => {
return transformWithBabel(content);
}
},
// ...
})
]
在一个理想的世界里,我们会有一个现成的预处理器插件来做这件事;实际上,该transformWithBabel
功能现在留给读者作为练习。本质上它会import * as babel from '@babel/core'
直接涉及和使用 Babel API,我保证这会很有趣。
注意@babel/plugin-syntax-dynamic-import
不编译动态导入,它只允许 Babel解析它。没有它,Babel 无法从里面的代码生成有效的 AST <script>
。
推荐阅读
- javascript - JavaScript 将对象映射到数组
- deep-learning - 梯度裁剪会降低 RNN 的有效性吗
- javascript - 您如何将 google maps 高程服务用作 jsx 标签?
- python - 如何理解 apply 函数来计算 pandas 中使用的加权平均值?
- c++ - 如何释放 new[] 分配的内存?
- javascript - 如何通过json_encode重定向php页面
- mysql - 需要帮助连接 SQL
- c# - 使用 c# 与 java/c++ 比较的 grpc 的性能基准数
- postgresql - 等待状态显示缓冲区引脚
- c - 当 xTicksToWait = portMAX_DELAY 时,xQueueReceive 会失败吗?