visual-studio-code - 如何在vscode中导入mjs?
问题描述
是否可以制作由 mjs 文件组成的 vscode 扩展?
因为我尝试只使用 mjs 文件进行扩展,以便在没有 TypeScript 的情况下拥有完整的 es6 功能。但它不运行:
如果我使用$ vsce package
它进行扩展不会给出任何错误,但它会产生一个在安装时不起作用的扩展:我在 package.json 中放入的贡献存在,但 vscode 显示一个错误弹出窗口,上面写着
激活扩展“my.ext”失败:必须使用导入来加载 ES 模块:c:\vsext\extension.mjs。
我尝试运行的每个命令都会出错
找不到命令“my.cmd”
如果我在调试器上运行扩展,并且标记了未捕获异常选项的断点,它将在 /src/vs/workbench/api/node/extHostExtensionService.ts:88 上中断。
经过进一步搜索,我注意到当脚本尝试加载第一个 mjs 模块时会生成此异常。
我可以做些什么来包含我的 mjs 库文件?
我认为这种行为也会影响 npm 模块与 mjs 文件的使用。
编辑
找到(某种)使用 esm 的方法:
想法是使用 esm 来处理 es6 导入并在导入的模块之间共享 vscode 对象
这看起来很棘手,但是当我尝试只输入import * as vscode from "vscode"
我的 mjs 文件时,vscode 抱怨找不到模块 vscode。
所以我做了以下
- 添加“esm”作为依赖
- 在所有使用vscode的文件中,去掉vscode的导入,添加类似这个函数的东西
var vscode; // will store vscode obj
export function IMPORTVSCODE(vscodeInstance){
vscode = vscodeInstance
}
- 在您需要 vscode(使用节点本机需要)和您的主模块(使用 esm 需要)的地方创建一个 init 文件
- 在初始化文件中调用 main.IMPORTVSCODE(vscode)
- 在导入需要 vscode 的文件 B 的所有文件 A 上,在使用从文件 B 导出的内容之前,调用 B.IMPORTVSCODE(vscode)
例如
// init.js
const vscode = require("vscode")
const esm = require("esm")(module/*, options*/)
const main = esm("./main.mjs")
main.IMPORTVSCODE(vscode)
module.exports = main
// main.mjs
import * as other from "./other.mjs"
var vscode; // will store vscode obj
export function IMPORTVSCODE(vscodeInstance){
vscode = vscodeInstance
}
function activate(){
other.IMPORTVSCODE(vscode)
other.methodThatNeedsVscode()
}
// other.mjs
var vscode; // will store vscode obj
export function IMPORTVSCODE(vscodeInstance){
vscode = vscodeInstance
}
export function methodThatNeedsVscode(){
vscode // ...use vscode
}
我的扩展现在运行良好!
但我认为可以找到更好的想法,所以如果有人有一些最好的解决方案,请分享
解决方案
推荐阅读
- html - 无法加载css文件
- python - 如果我缓存一个 Spark Dataframe 然后覆盖引用,原始数据帧还会被缓存吗?
- c# - 无法从移动应用程序连接到 api 端点
- debugging - Dialogflow Flutter Chatbot - NoSuchMethodError:在 null 上调用了方法“[]”
- c# - Linq查询更新符合我条件的组中的所有项目
- html - 我无法填写“输入”和“文本区域”
- c# - 从 asp.net core 中的 Bootstrap 双列表中检索选定的值
- android - 如何使用 Volley 将 Recyclerview 列表发送到服务器
- tensorflow - 沿张量流中张量的行或列的范围
- nestjs - NestJS - 无法解析 ConfigService