了解RequireJS和jQuery noConflict

时间:2018-12-06 05:55:20

标签: javascript jquery typescript requirejs undefined

我发现本节介绍了如何在RequireJS中使用noConflict jQuery:

https://requirejs.org/docs/jquery.html#noconflictmap

这让我有些困惑。我按照说明制作了一个单独的jquery-private.js及其映射。

据我所知,映射提供了“重新映射”模块名称的规则,并提供了一个新模块代替。

在“映射”部分中,该行的确切位置:

'jquery-private': { 'jquery': 'jquery' }

吗?我想这会简单地用jquery代替jquery ...(我知道其他人可以用jquery代替jquery-private的所有模块)

此解决方案最初不适用于我,但需要使用路径条目:

'jquery': 'lib/jquery/dist/jquery'

这会将模块名称映射到路径(附加到baseUrl),以便它可以解析模块。

根据我的理解,在示例中,jquery的映射期望模块通过在baseUrl处具有“ jquery.js”来解析。将上面的路径追加到映射的末尾会在页面上加载jquery,但是任何以'jquery'作为依赖项加载的requirejs语句(它会找到依赖项或抛出404错误的异常),但会被传递'未定义”。

一个例子是:

requirejs.config({
    baseUrl: "./js",
    paths: {
        //'jquery': 'lib/jquery/dist/jquery'
    },
    map: {
        '*': {
            'TestPluginMain': 'modules/TestPlugin/TestPlugin',
            'jquery': 'jquery-private'
        },
        'jquery-private': {'jquery': 'lib/jquery/dist/jquery'}
    }
});

requirejs(['jquery'], function( jq ) {
    console.log( jq );
    console.log("jquery included");
});

在上面的示例中,我包含了require.js,然后将此代码包含在js文件中。

究竟是什么导致“ jq”未定义,而requirejs找到了js文件?

我知道jquery将自己定义为模块,并且如果jquery在1.6以下-添加该功能时(我相信)-如果存在jquery,则requirejs将定义该模块。这会重要吗?我只是不确定这里发生了什么。

0 个答案:

没有答案