首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么基金会似乎要垃圾RequireJS模块?

为什么基金会似乎要垃圾RequireJS模块?
EN

Stack Overflow用户
提问于 2016-03-01 11:17:16
回答 1查看 287关注 0票数 0

我的HTML是这样的:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
    <script data-main="/static/scripts/main" src="/static/scripts/require.js"></script>
</head>
<body></body>
</html>

static/scripts/main看起来是这样的:

代码语言:javascript
复制
requirejs.config({
    paths: {
        "foundation": '/static/scripts/foundation-6/js/foundation.min'
    }
});    

require(["foundation", "moduleA"], function(foundation, moduleA) {
    console.log("main.js loaded dependencies");
});

static/scripts/moduleA.js是:

代码语言:javascript
复制
console.log("ModuleA loaded");

define(function() {    
    console.log("inside moduleA callback");
    return {
        Blah: "Blah!"
    }    
});

我可以看到moduleA.js脚本是由require加载的,但是它并没有被当作一个模块来处理,而且我从控制台中看到内部回调从未被执行过。console.log行中的main.js中断点显示,作为moduleA返回的不是我所期望的模块,而是Interchange(element, options)的实例,而返回的foundation对象是Abide(element, options)的实例。这些似乎是基金会组件,但我不明白为什么要在这里返回。

但是,假设然后通过将main.js中的require语句更改为:

代码语言:javascript
复制
require(["moduleA"], function(moduleA) {
    console.log("main.js loaded dependencies");
});

运行使一切按预期工作-我现在看到控制台中的“内部moduleA回调”消息,一个断点显示我的moduleA对象包含一个Blah成员。

这里发生什么事情?基金会如何拦截这个请求()调用并返回一些不想要的东西?有什么不同的方式,我应该把基金会纳入这个项目吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-01 14:09:28

首先,您应该知道基础库是AMD模块。您应该打开foundation.js,并在开始时尝试找到以下代码:

代码语言:javascript
复制
if (typeof define === 'function' && define['amd']) {
    // [1] AMD anonymous module
    define(['exports', 'require'], factory);
}

因此,foundation.js不是AMD模块。RequireJS对非AMD模块有希姆选项.接下来,您应该检查哪个变量基础返回到全局范围。在三百零二行,您可以看到以下代码:window.Foundation = Foundation;。全局变量是Foundation。结果代码应为:

代码语言:javascript
复制
requirejs.config({
    paths: {
        "foundation":   'https://cdnjs.cloudflare.com/ajax/libs/foundation/6.2.0/foundation',     
    },
    shim:{
        "foundation":{
            exports:"Foundation"
        }
    }
}); 

但不幸的是,对foundation.js来说还不够。在303行中,您可以看到foundation.js是jquery。因此,您应该通过RequireJS包含jquery。jQuery是AMD模块。你可以在文件里看到它。您应该将jQuery作为foundation.js的依赖项包含在shim中。因此,结果代码是:

main.js:

代码语言:javascript
复制
requirejs.config({
    paths: {
        "foundation":   'https://cdnjs.cloudflare.com/ajax/libs/foundation/6.2.0/foundation',
        "jquery":       "https://code.jquery.com/jquery-2.2.1"
    },
    shim:{
        "foundation":{
            deps: ['jquery'],
            exports:"Foundation"
        }
    }
});  

require(["foundation", "moduleA"], function(foundation,moduleA) {
    debugger;
    console.log("main.js loaded dependencies");
});

index.html:

代码语言:javascript
复制
<html>
    <head>
       <script data-main="main.js" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.22/require.js">  </script>
    </head>
    <body>
    </body>
</html>

moduleA.js是一样的。

如果你能纠正我的语法错误,我将不胜感激。

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

https://stackoverflow.com/questions/35721445

复制
相关文章

相似问题

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