标签: requirejs

CommonJS,AMD和RequireJS之间的关系?

我对CommonJS,AMD和RequireJS仍感到非常困惑.即使阅读了很多.

我知道CommonJS(以前称为ServerJS)是一个用于在浏览器外部使用语言时定义一些JavaScript规范(即模块)的组.CommonJS模块规范有一些像Node.js或RingoJS的实现,对吧?

CommonJS,异步模块定义(AMD)和RequireJS之间有什么关系?RequireJS是CommonJS模块定义的实现吗?如果是的话,那么什么是AMD呢?

javascript module amd commonjs requirejs

817
推荐指数
5
解决办法
17万
查看次数

将Require.js与Angular.js一起使用是否有意义?

我是Angular.js的新手,并试图理解它与Backbone.js的不同之处......我们曾经使用Backbone来管理我们的包依赖关系和Require.js.使用Angular.js做同样的事情是否有意义?

javascript requirejs angularjs

444
推荐指数
10
解决办法
16万
查看次数

我何时应该使用require()以及何时使用define()?

过去几天我一直在玩requirejs.我试图理解define和require之间的区别.

定义似乎允许模块分离并允许遵守依赖性排序.但它会下载所需的所有文件.虽然只需要在您需要时加载您需要的东西.

这两者可以一起使用,是否应该使用它们?

require requirejs

310
推荐指数
2
解决办法
9万
查看次数

防止RequireJS缓存所需的脚本

RequireJS似乎在内部执行缓存所需javascript文件的操作.如果我对其中一个必需文件进行了更改,则必须重命名该文件才能应用更改.

将版本号作为查询字符串参数附加到文件名末尾的常见技巧不适用于requirejs <script src="jsfile.js?v2"></script>

我正在寻找的是一种方法来防止这种内部缓存RequireJS所需的脚本,而不必在每次更新时重命名我的脚本文件.

跨平台解决方案:

我现在正在urlArgs: "bust=" + (new Date()).getTime()开发和urlArgs: "bust=v2"生产期间用于自动缓存清除,我在推出更新的所需脚本后增加硬编码版本num.

注意:

@Dustin Getz在最近的回答中提到,Chrome Developer Tools会在调试期间丢弃断点,此时Javascript文件会不断刷新.一种解决方法是编写debugger;代码以在大多数Javascript调试器中触发断点.

服务器专用解决方案:

对于可能更适合您的服务器环境(如Node或Apache)的特定解决方案,请参阅下面的一些答案.

javascript jquery requirejs

296
推荐指数
7
解决办法
10万
查看次数

从Gulp任务中排除文件/目录

我有一个gulp rjs任务连接和uglifies我所有的自定义.JS文件(任何非供应商库).

我想要做的是从这个任务(控制器和指令)中排除一些文件/目录.

继承我的树:

 - application
    - resources
      - js
        main.js
        - vendor
            - jquery
            - modernzr
            - angular
        - controllers
            - controller1
            - controller2
            - controller3
        - directives
            - directives1
            - directives2
            - directives3
        - widgets
            - widget1
            - widget2
            - widget3
            - widget4
        - modules
            - modules1
            - modules2
            - modules3
            - modules4
Run Code Online (Sandbox Code Playgroud)

在这里,我的gulp.js

dir = {
    app:        'application',
    dest:       'dest',
};

config = {
    src: {
        js: dir.app + '/resources/js'
    },
    dest: {
        js: dir.dest + '/resources/js' …
Run Code Online (Sandbox Code Playgroud)

minify requirejs uglifyjs gulp

218
推荐指数
2
解决办法
13万
查看次数

使用RequireJS加载Backbone和Underscore

我正在尝试使用RequireJS加载Backbone和Underscore(以及jQuery).使用最新版本的Backbone和Underscore,看起来有点棘手.例如,Underscore自动将自己注册为模块,但Backbone假设Underscore在全球范围内可用.我还应该注意,Backbone似乎没有将自己注册为一个模块,这使得它与其他库不一致.这是我能想到的最好的main.js:

require(
{
    paths: {
        'backbone': 'libs/backbone/backbone-require',
        'templates': '../templates'
    }
},
[
    // jQuery registers itself as a module.
    'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js',

    // Underscore registers itself as a module.
    'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.2.1/underscore-min.js'
], function() {

    // These nested require() calls are just due to how Backbone is built.  Underscore basically says if require()
    // is available then it will automatically register an "underscore" module, but it won't register underscore
    // as a global "_".  However, Backbone expects Underscore to be a global variable.  To …
Run Code Online (Sandbox Code Playgroud)

javascript requirejs backbone.js underscore.js

172
推荐指数
3
解决办法
7万
查看次数

在JavaScript中使用的'define'是什么(除了显而易见的)?

我已经搜索了关于此的文档的高低,但我在任何地方都找不到任何东西.

我正在使用Aloha并希望使用他们的侧边栏原型来创建我自己的新侧边栏,附加到其他插件功能.

他们的sidebar.js从这开始,但我不能为我的生活找到任何解释它意味着什么的文档.

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {
Run Code Online (Sandbox Code Playgroud)

然后它继续在那个包装器中定义一堆函数,所以vars还有一些proptotypes- 我可以解决这个问题......

那是什么说法或在哪里可以找到解释?

javascript requirejs requirejs-define

159
推荐指数
2
解决办法
8万
查看次数

Require.js和在DOM中创建<script>元素有什么区别?

使用Require.JS和<script>在DOM中创建元素之间的区别是什么?

我对Require.JS的理解是它提供了加载依赖项的能力,但这不能简单地通过创建一个<script>加载必要的外部JS文件的元素来完成吗?

例如,假设我有函数doStuff(),这需要函数needMe().doStuff()在外部文件中do_stuff.js,而needMe()在外部文件中need_me.js.

这样做Require.JS方式:

define(['need_me'],function(){
    function doStuff(){
        //do some stuff
        needMe();
        //do some more stuff
    }
});
Run Code Online (Sandbox Code Playgroud)

只需创建一个脚本元素即可:

function doStuff(){
    var scriptElement  = document.createElement('script');
    scriptElement.src = 'need_me.js';
    scriptElement.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(scriptElement);

    //do some stuff
    needMe();
    //do some more stuff
}
Run Code Online (Sandbox Code Playgroud)

这两项都有效.但是,第二个版本不要求我加载所有Require.js库.我真的没有看到任何功能差异......

javascript dynamic-script-loading requirejs js-amd

138
推荐指数
3
解决办法
3万
查看次数

如何在RequireJS中模拟单元测试的依赖项?

我有一个我想测试的AMD模块,但我想模拟它的依赖项而不是加载实际的依赖项.我正在使用requirejs,我的模块的代码看起来像这样:

define(['hurp', 'durp'], function(Hurp, Durp) {
  return {
    foo: function () {
      console.log(Hurp.beans)
    },
    bar: function () {
      console.log(Durp.beans)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能模拟出来hurp,durp所以我可以有效地进行单元测试?

javascript unit-testing mocking requirejs

126
推荐指数
5
解决办法
3万
查看次数

匿名的define()模块不匹配

当我第一次浏览我的webapp时(通常在具有禁用缓存的浏览器中),我收到此错误.

错误:匿名的define()模块不匹配:function(require){

HTML:

<html>
   .
   .
   .
   <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
   <script> var require = { urlArgs: "v=0.4.1.32" }; </script>
   <script data-main="assets/js/main" src="assets/js/libs/require.js"></script>
   <script src="assets/js/ace/ace.js?v=0.4.1.32"></script>
   </body>
</html>
Run Code Online (Sandbox Code Playgroud)

JS:

$(function () {
    define(function (require) {
        // do something
    });
});
Run Code Online (Sandbox Code Playgroud)

无论如何知道这个错误究竟是什么意思以及它为什么会发生?

源文件,在github问题页面中对它进行简短讨论

javascript jquery requirejs

115
推荐指数
6
解决办法
18万
查看次数