Ani*_*ket 37 javascript requirejs
我们可以通过给它命名来在requireJS中创建一个模块:
define("name",[dep],function(dep) {
// module definition
});
Run Code Online (Sandbox Code Playgroud)
或者我们可以创建一个不包括名称:
define([dep],function(dep) {
// module definition
});
Run Code Online (Sandbox Code Playgroud)
哪个是创建模块的更好方法?我知道RequireJS建议避免分配模块名称.
但我想知道我们在什么场景下做,而不必给模块命名.这会影响使用吗?每种方式的优点和缺点是什么?
Lou*_*uis 19
这就是requirejs 文档在命名模块主题上所说的内容:
这些通常由优化工具生成.您可以自己明确命名模块,但它使模块的可移植性降低 - 如果将文件移动到另一个目录,则需要更改名称.通常最好避免使用模块名称进行编码,只需让优化工具在模块名称中进行刻录.优化工具需要添加名称,以便可以在文件中捆绑多个模块,以便在浏览器中加快加载速度.
但是,假设您希望您的模块具有一个众所周知的名称,该名称允许始终以与任何其他模块相同的方式要求它.那你需要使用define
名字的电话吗?一点也不.您可以paths
在配置中使用:
paths: {
'jquery': 'external/jquery-1.9.1',
'bootstrap': 'external/bootstrap/js/bootstrap.min',
'log4javascript': 'external/log4javascript',
'jquery.bootstrap-growl': 'external/jquery.bootstrap-growl',
'font-awesome': 'external/font-awesome'
},
Run Code Online (Sandbox Code Playgroud)
使用这种配置,可以要求jQuery "jquery"
,Twitter Bootstrap as "bootstrap"
等.最佳做法是将define
名称调用留给优化器.
red*_*ard 11
在我的脑海中,我见过的唯一使用命名模块方法的模块是jQuery.就个人而言,我还建议使用未命名的模块模式.
通过命名模块,用于要求的名称与其位置无关.另一个模块作者可能盲目地要求'jquery',而不知道模块路径.如果您正在开发可重用模块(在项目之外),这将非常有用.但是,它的缺点是(使用jQuery作为示例),您需要在paths
config属性中添加和输入RequireJS以指向文件的正确位置.否则,RequireJS无法找到要加载的文件,除非它放在您的基本require目录中.
我发现这些更好,因为你可以利用相对需求路径.比方说,你有两个文件modules/ClassA
和modules/ClassB
. ClassB
可以要求ClassA
使用'./ClassA'
,并且可以根据需要移动整个目录.通过使用未命名的模块,您还可以消除命名冲突的可能性,除非您设法找到一种方法将两个文件放在同一目录中,具有相同的名称.