Чтение имени из package.json в редакторе Monaco.

У меня возникли проблемы с добавлением определений пользовательских типов в Редактор Monaco с именами, начинающимися с символа @. Вот пример, который должен иллюстрировать то, чего я пытаюсь достичь:

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES2016,
    allowNonTsExtensions: true,
    module: monaco.languages.typescript.ModuleKind.CommonJS,
    noEmit: true,
    typeRoots: ["node_modules/@types"]
});

monaco.languages.typescript.typescriptDefaults.addExtraLib(
    "export class Foo { }",
    "node_modules/@types/@my-module/sub/index.d.ts"
);

monaco.editor.create(document.getElementById("container"), {
    model: monaco.editor.createModel(
        `import * as x from "@my-module/sub"`, 
        "typescript",
        new monaco.Uri("main.ts")
    )
});

Это не работает, потому что мой пользовательский модуль называется @my-module/sub. Если в этом примере я заменю имя модуля на my-module/sub, тогда все будет работать, как и ожидалось, и я получу Intellisense. Знаете ли вы, поддерживает ли Монако этот сценарий, и если да, то как правильно это сделать? Очевидно, что изменение имени моего модуля не вариант.

Вы можете попробовать этот фрагмент на Monaco Playground.


person Darin Dimitrov    schedule 27.11.2017    source источник


Ответы (1)


Удалось найти решение, просто нужно было удалить параметр компилятора typeRoots и вместо него использовать префикс node_modules:

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES2016,
    allowNonTsExtensions: true,
    module: monaco.languages.typescript.ModuleKind.CommonJS,
    noEmit: true
});

monaco.languages.typescript.typescriptDefaults.addExtraLib(
    "export class Foo { }",
    "node_modules/@my-module/sub/index.d.ts"
);

monaco.editor.create(document.getElementById("container"), {
    model: monaco.editor.createModel(
        `import * as x from "@my-module/sub"`, 
        "typescript",
        new monaco.Uri("main.ts")
    )
});
person Darin Dimitrov    schedule 28.11.2017