Можно ли сделать расширение vscode из m js файлов?
, потому что я пытался создать расширение только для файлов m js, чтобы иметь полные возможности es6 без TypeScript. Но он не запускается:
Если я создаю расширение с помощью $ vsce package
, оно не выдает никакой ошибки, но создает расширение, которое не работает при установке: вклады, которые я поместил в пакет. json присутствуют, но vscode показывает всплывающее окно с сообщением
Ошибка активации расширения «my.ext»: необходимо использовать импорт для загрузки модуля ES: c: \ vsext \ extension.m js.
и каждая команда, которую я пытаюсь выполнить, выдает ошибку
команда 'my.cmd' не найдена
Если я запустите расширение в отладчике, и отметьте опцию точки останова на неперехваченном исключении; оно прерывается на /src/vs/workbench/api/node/extHostExtensionService.ts:88.
После дальнейшего поиска я заметил, что это исключение в generatend, когда скрипт пытается загрузить первый модуль m js.
что я могу сделать, чтобы включить мои файлы библиотеки m js?
Я думаю, что такое поведение также может повлиять на использование npm модулей с m * 1 079 * files.
EDIT
Найден (вид) способ использования esm:
Идея состоит в том, чтобы использовать esm для обработки импорта es6 и делить объект vscode между импортированными модулями
это может показаться довольно сложным, но когда я попытался просто import * as vscode from "vscode"
im мои m js файлы, vscode пожаловался, что не может найти модуль vscode .
, поэтому я сделал следующее
- добавьте 'esm' в качестве зависимости
- во все файлы, где vscode используется, удалите импорт vscode и добавьте что-то вроде этой функции
var vscode; // will store vscode obj
export function IMPORTVSCODE(vscodeInstance){
vscode = vscodeInstance
}
- создайте файл инициализации, где вам требуется vscode (с собственным узлом require) и ваш основной модуль (с esm require)
- в файле инициализации вызов main.IMPORTVSCODE (vscode)
- для всех файлов A, которые импортируют файл B, для которого требуется vscode, перед использованием экспортированного содержимого из файла 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.js
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
}
My e xtension работает нормально!
Но я думаю, что можно найти лучшие идеи, поэтому, если у кого-то есть какие-то лучшие решения, поделитесь ими