每个脚本文件只能有一个匿名定义调用

时间:2019-03-08 05:49:53

标签: javascript amd monaco-editor visual-studio-monaco

我正在使用loader.js创建monaco编辑器,但在控制台中收到2次错误“每个脚本文件只能有一个匿名定义调用”。

<script src="/monaco-editor/min/vs/loader.js"></script>

创建编辑器的代码

require.config({ paths: { 'vs': '/monaco-editor/min/vs' }});
 require(['vs/editor/editor.main'], function() {                
    monacoEditor= monaco.editor.create(document.getElementById('coding-editor'), {
        value: [
        'function x() {',
        '\tconsole.log("Hello world!");',
        '}'
    ].join('\n'),
    language: 'javascript'
    });
 });

我试图搜索问题,并找到以下相关答案:

您正在加载的某些代码正在调用带有匿名模块ID的define。您可以:

通过AMD加载程序加载该代码(即手动要求它),以便AMD加载程序创建<script>标签。

在AMD加载程序之前加载该代码(即define对该代码段不可用)

在该脚本评估期间未定义定义(即,如果您使用<script>标签加载该脚本,则先取消定义并在之后恢复它)

尝试取消定义define.jquery,AFAIK jquery可能正在检查define函数上的内容

此页面已经有很多jquery,由于jQuery我了解这一点。请帮助一些人以身作则。谢谢

2 个答案:

答案 0 :(得分:0)

今天早上我遇到了同样的问题,我应用了第二个解决方案。

  

在AMD加载程序之前加载该代码(即define对该代码段不可用)

之所以可行,是因为错误说是从jQuery内部匿名调用define。在require.js website中有进一步的解释,恰好使用了类似于loader.js的加载器功能(定义,要求)。

就我而言,我只是简单地确保将加载程序包含在jQuery之后,以免define冲突。

答案 1 :(得分:0)

我曾尝试通过标签创建脚本,但收到警告:'只能有一个匿名定义' 所以我只是覆盖它:

        this.temp_define = window['define'];
        head.appendChild(loaders);
        window['define'] = undefined;