标签: amd

为什么连接的RequireJS AMD模块需要加载器?

我们在开发过程中喜欢RequireJS和AMD,我们可以编辑模块,在浏览器中点击重新加载,然后立即看到结果.但是,当需要将我们的模块连接到单个文件进行生产部署时,显然必须有一个AMD加载器仍然存在,无论该加载器是RequireJS本身还是其较小的合作伙伴"杏仁",如下所述:

http://requirejs.org/docs/faq-optimization.html#wrap

我的困惑是:为什么装载机是必需的?除非你有非常特殊的情况使你有必要require()在你的模块内部进行调用,否则似乎可以连接一系列AMD模块而不需要加载器.最简单的例子是一对模块,如下所示.

ModA.js:

define([], function() {
    return {a: 1};
});
Run Code Online (Sandbox Code Playgroud)

ModB.js:

define(['ModA'], function(A) {
    return {b : 2};
});
Run Code Online (Sandbox Code Playgroud)

鉴于这两个模块,似乎连接器可以简单地生成以下文本,而不会使生产服务器或浏览器承受RequireJS或Almond所需的额外带宽或计算.

我想象一个产生的连接器(我使用V形符号«,»来显示上面两个模块的片段插入位置):

(function() {
    var ModA = «function() {
        return {a: 1};
    }»();
    var ModB = «function(A) {
        return {b : 2};
    }»(ModA);
    return ModB;
})();
Run Code Online (Sandbox Code Playgroud)

据我所知,这可以正确地重现AMD的语义,只需要少量的外来胶水JavaScript.有这样的连接器吗?如果没有,我会因为认为我应该写一个而变得愚蠢 - 是否真的很少有代码库由简单而干净的模块组成,define()并且永远不需要进一步的require()调用来启动以后的异步代码提取?

javascript amd web-deployment requirejs almond

37
推荐指数
1
解决办法
4518
查看次数

支持CommonJS和AMD

有没有办法创建一个javascript微库(没有依赖的库),它支持以下所有模块格式:

  • 异步模块定义
  • CommonJS的
  • 将库的导出公开为全局命名空间对象(无加载器)

javascript amd commonjs

36
推荐指数
3
解决办法
9666
查看次数

TypeScript:编译删除未引用的导入

在我们的项目中,我们使用RequireJS作为模块加载器.我们的一些模块会影响全局库,因此不会直接在它们被引用的模块中使用.

例:

define(['definitely/goingto/usethis/','just/referencingthis/forpackaging'], function(useThis) {
    useThis.likeIPromised();

    // the following call can only be made when the second required file is available
    someGlobalAvailableVariable.someMethod();
});
Run Code Online (Sandbox Code Playgroud)

在JavaScript中编写模块时,这可以正常工作.但是,我们正在逐步将项目翻译为TypeScript.鉴于上面的示例,这会导致:

import useThis = module("definitely/goingto/usethis/");
import whatever = module("just/referencingthis/forpackaging");

useThis.likeIPromised();

// I've written a definition file so the following statement will evaluate
someGlobalAvailableVariable.someMethod();
Run Code Online (Sandbox Code Playgroud)

在将其编译为JavaScript时,编译器希望对您有所帮助,并删除任何未使用的导入.因此,这会破坏我的代码,导致第二个导入的模块不可用.

我目前的工作是包括一个冗余的任务,但这看起来很难看:

import whatever = module("just/referencingthis/forpackaging");
var a = whatever; // a is never ever used further down this module
Run Code Online (Sandbox Code Playgroud)

有谁知道是否有可能将TypeScript编译器配置为在编译期间不优化模块?

javascript amd requirejs typescript tsc

34
推荐指数
2
解决办法
3585
查看次数

使用require.js实现jQuery的正确方法

我正在使用require.js和jQuery的当前稳定版本,我目前包括这样的jQuery

requirejs.config({
paths: {
    'jQuery': 'vendor/jquery',
}
});

require(['jQuery'], function(jQuery) {
    log(jQuery); // working
});
Run Code Online (Sandbox Code Playgroud)

我没有得到的是我真的不需要明确地回馈jQuery,因为它仍然可以工作(也在其他模块中):

require(['jQuery'], function( // nothing here ) {
    log(jQuery); // working
});
Run Code Online (Sandbox Code Playgroud)

现在我不确定这是否是正确的方法,也因为使用$ dollar符号来引用jQuery不起作用!

javascript jquery amd requirejs

29
推荐指数
1
解决办法
4万
查看次数

RequireJS:require()和define()之间的区别

在RequireJS中,使用require()Vs define();之间的基本区别是什么?

require(['a'], function(a) {
    // some code
});

// A.js
define(['b','c','d','e'], function() {
    //some code
});
Run Code Online (Sandbox Code Playgroud)

任何用例都会非常有用..

javascript amd requirejs

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

TypeScript中的依赖注入

我正在研究用TypeScript做TDD的可能性.如果我在TypeScript中编写我的测试,是否可以使import语句为我测试的类返回模拟?或者是用纯JavaScript编写测试并处理自己注入AMD的唯一​​可行方法?

tdd amd requirejs typescript

28
推荐指数
4
解决办法
2万
查看次数

加载打字稿模块依赖的三种方法有什么区别?

以下加载打字稿模块依赖关系的方法有什么区别?

/// <amd-dependency path="someFile"/>

/// <reference path="someFile.ts" />

import someFile = require("someFile");
Run Code Online (Sandbox Code Playgroud)

amd requirejs js-amd typescript typescript1.4

28
推荐指数
1
解决办法
1万
查看次数

requireJS可选依赖项

我正在为我开发的javascript库添加AMD支持.

这个库可能使用jquery但是如果没有加载jquery它仍然可以工作.

在定义模块依赖项时,有一种方法可以将依赖项设置为"可选",这样如果缺少该库,模块仍然可以工作吗?

javascript amd requirejs

27
推荐指数
2
解决办法
9500
查看次数

IDE自动完成javascript AMD加载样式

有谁知道可以自动完成javascript AMD风格的IDE:

// my dojoConfig defined aliases to the packages I use (dojo, dmidz)
// so in dmidz/my-module.js
define(['dojo/dom-construct'], function(cons){// requiring some dojo module
   cons.// <- oh it is nicely displaying list of dom-construct module methods
});
Run Code Online (Sandbox Code Playgroud)

请不要只提供您喜欢的最好,最酷的IDE.我尝试过Komodo和Webstorm,我只是无法让它们工作,或者我没有正确配置它们......但没有一个可以设置与dojoConfig相同的别名(太难了?).例如在Webstorm中,有一个库概念,我添加了dojo和我的包,但当然没有办法,如果不知道别名路径.还有一个Path Variables概念,无法理解它是如何工作的,文档太差了!

感谢您的帮助.

javascript ide amd

27
推荐指数
1
解决办法
2282
查看次数

JS中的RequireJS/AMD获得了多少速度?

在一个大型网站上,requireJS实际上要快多少?

有没有人对使用异步加载的大型网站的速度进行过任何测试?

例如,使用具有大量视图(> 100)的Backbone,最好是简单地让一个视图对象一次性加载所有视图,然后始终可用,或者它们是否应根据需要异步加载?

此外,移动与桌面的这些考虑因素有什么不同吗?我听说你想限制手机上的请求而不是大小.

javascript performance asynchronous amd requirejs

26
推荐指数
2
解决办法
1万
查看次数