如何在knitr中为JavaScript代码块的script标签添加type="module"属性?
解决knitr插入ES模块JavaScript代码的type="module"问题
方法1:直接通过代码块选项添加属性
在knitr的JavaScript代码块中,使用attr参数为生成的<script>标签指定type="module"属性:
import { MyModule } from './js/mymodule.js'; // 其他代码
生成的HTML中对应的script标签会自动带上type="module",满足ES模块的导入语法要求。
方法2:自定义钩子批量处理模块代码块
如果需要批量处理多个ES模块代码块,可以自定义一个knitr钩子,自动替换默认的script标签:
首先在R代码块中定义钩子:
knitr::knit_hooks$set(jsmodule = function(before, options, envir) { if (before) { return('<script type="module">') } else { return('</script>') } })
之后在需要作为模块的JS代码块中启用这个钩子:
import { MyModule } from './js/mymodule.js'; // 其他代码
注意事项
- 确保模块导入的路径符合ES模块规范,比如相对路径必须以
./或../开头 - 该方案仅适用于HTML输出格式,因为
type="module"是HTML5的特性
内容的提问来源于stack exchange,提问作者TobyRush
相关产品推荐
相关产品推荐

