首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >require.js shim选项在使用r.js和“空:”时不起作用

问require.js shim选项在使用r.js和“空:”时不起作用
EN

Stack Overflow用户
提问于 2015-06-30 15:39:11
回答 1查看 333关注 0票数 0

我使用jquery 1.11.3、require.js 2.1.18和r.js 2.1.18

为了使用浏览器缓存,我想要放置jquery.js外部站点。

代码语言:javascript
复制
//file js/main.js
require.config({
        baseUrl: 'js',
        paths: {
                'jquery': '//cdn.bootcss.com/jquery/1.11.3/jquery.js'
        },
        shim: {
                'p': ['jquery']
        }
});

require(['jquery', 'p'], function($) {
        alert(222);
});


//file js/p.js
//this is an jquery plugin which does not support AMD
alert($().jquery);


//file build.js
({
        baseUrl: "js",
        name: "main",
        out: "app.js",
        paths: {jquery: "empty:"}
})

它会导致错误

代码语言:javascript
复制
`Uncaught ReferenceError: $ is not defined(anonymous function) @ app.js:1`

但下面的代码可以工作,警报(“1.1.13”),然后警报(222)

代码语言:javascript
复制
//file js/main.js
require.config({
        baseUrl: 'js',
        paths: {
                'jquery': 'jquery.js'
        },
        shim: {
                'p': ['jquery']
        }
});

require(['jquery', 'p'], function($) {
        alert(222);
});


//file js/p.js
alert($().jquery);


//file build.js
({
        baseUrl: "js",
        name: "main",
        out: "app.js",
        paths: {jquery: "jquery"}
})

代码的第一部分有什么问题?谢谢~

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 16:49:31

RequireJS不会允许你做你想做的事情。shim把它拼了出来:

不将CDN加载与构建配置混合在一起。示例场景:您从CDN加载jQuery,但使用shim加载类似于依赖于jQuery的主干网的库存版本。在进行构建时,请确保在构建的文件中内联jQuery,并且不要从CDN加载它。否则,主干将在构建的文件中内联,并在CDN加载的jQuery加载之前执行。这是因为shim只是延迟了文件的加载,直到加载了依赖关系,但是没有进行任何自动包装定义。在构建后,依赖项已经内联,shim配置不能将非定义()d代码的执行延迟到以后。 define ()d模块在构建后确实可以使用CDN加载的代码,因为它们正确地将源封装在定义工厂函数中,直到加载依赖项才会执行。因此,shim配置是非模块化代码的停止-间隙度量,遗留代码。定义()d模块更好。

(强调后加)

除非您将p重写为一个适当的AMD模块,否则您必须放弃CDN。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31142676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档