как импортировать m js в vscode? - PullRequest
1 голос
/ 20 февраля 2020

Можно ли сделать расширение 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 работает нормально!

Но я думаю, что можно найти лучшие идеи, поэтому, если у кого-то есть какие-то лучшие решения, поделитесь ими

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...