5

我在我的应用程序中嵌入了 Monaco 编辑器,我有一些 javascript 文件不应该显示“Web”环境的完成(想想 Node.js 或类似的)我希望只为定义的函数和类显示完成在页面上。

如何从 javascript 模式中删除所有“Web”自动完成?

在此处输入图像描述

4

3 回答 3

5

这是一个很好的问题。这个 Github 问题涵盖了相同的主题:https ://github.com/Microsoft/monaco-editor/issues/61 。

据此,禁用内置库是通过将 noLib 传递给 setCompilerOptions 来完成的:

monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ noLib: true, allowNonTsExtensions: true });

您可以使用 addExtraLib 添加其他类型,它挂在 javascriptDefaults 之外。Typescript 提供了一些 d.ts 文件,这些文件提供了 ES5 和 ES6 的基础知识,而没有浏览器的繁琐。下载其中一个并找到一种方法将其包含在您的项目中。您需要将其作为字符串传入。

var coreDefsName = 'lib.es5.d.ts';

// Import the text of your chosen def file.  This will depend on your bundler.
var coreDefs = getResourceString('./' + coreDefsName);

// Register the additional library.
monaco.languages.typescript.javascriptDefaults.addExtraLib(
coreDefs,
coreDefsName
);
于 2017-04-05T12:35:20.753 回答
2

除了 . 还有另一种方法noLibs。您还可以使用libs来定义所需的默认库,而无需删除所有默认库。例如,您可能仍然需要 ES6 库。

monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
  target: monaco.languages.typescript.ScriptTarget.ES2015,
  lib: ["es6"]
});

来自 CompilerOptions 部分的 Typescript 文档:

笔记:

如果未指定 --lib ,则注入默认的库列表。注入的默认库是: For --target ES5: DOM,ES5,ScriptHost For --target ES6: DOM,ES6,DOM.Iterable,ScriptHost

您可能想要做的是省略DOM库。

确保您使用typescriptDefaultsfor the typescriptlanguage 和typescript.javascriptDefaultsfor the javascriptlanguage。我认为它们基本上与摩纳哥相当。这让我绊倒了一段时间。

于 2018-12-15T21:42:08.007 回答
1

如果你使用这个库在 React JS 中使用它: https ://www.npmjs.com/package/@monaco-editor/

从“@monaco-editor/react”导入编辑器

然后你可以写下以下几点来改变编辑的行为:

<Editor
  height="90vh"
  defaultLanguage="javascript"
  defaultValue={code}
  options={{
    quickSuggestions: {
      other: false,
      comments: false,
      strings: false
    },
    parameterHints: {
      enabled: false
    },
    suggestOnTriggerCharacters: false,
    acceptSuggestionOnEnter: "off",
    tabCompletion: "off",
    wordBasedSuggestions: false
  }}
/>

要查看可能的选项列表,请检查IStandaloneEditorConstructionOptions

于 2021-06-18T11:08:47.400 回答