我想定义一个模块,它只需要其他模块,以确保它们被包含在内。像这样:
File: common.js
define(['routes/index_route', 'routes/guides_route']);```
r.js输出是:
define(['routes/index_route', 'routes/guides_route']);
这是错误的,因为它应该输出一个命名模块。
但是如果我用这样的虚函数回调定义它:
File common.js
define(['routes/index_route', 'routes/guides_route'], function() {});
r.js输出正确。
define('routes/common',['routes/index_route', 'routes/guides_route'],
function() {});
是否可以定义一个模块,其唯一目的是要求其他类似的模块?
为什么r.js会像这样?
修改
我遇到了amd lingo的麻烦,所以我将定义我的问题。
我有一个包含所有模块的router.js。
File: router.js
define(['routes/index_route', 'routes/guides_route', 'routes/other_route'],
function() {
});
我包含所有这些routes
('index_route,guides_route'),但我真的不需要任何引用。所以不要包括一堆
像这样的router.js中的routes
,我希望将所有这些routes
包含在一个单独的文件中,并在router.js中包含该文件。
File: router.js
define(['routes/common'], function() {});
File: routes/common.js
define(['routes/index_route', 'routes/guides_route', 'routes/other_route']);
然后出现上述问题。
TL; DR 我认为你很困惑什么需要和定义是。和r.js用于什么。
我虽然require(['module'], function() {})
和define(['module'], function() {})
之间存在差异
要求函数立即调用,只有当其他模块需要时才调用define函数。
所以
if you want to request modules you need to use require insead of define
毫无意义。
TL; DR 请告诉我区别:
define(['module']);
define(['module'], function() {})
就优化器如何对它们进行操作而言。这将告诉我为什么优化器在两种情况下输出不同。
define(['module']);
define('filename', ['module']);
如果我遇到某种陷阱,请多点亮一点,否则不要再混淆我的噪音。
答案 0 :(得分:1)
r.js行为正常。如果您想申请模块,则需要使用require
代替define
require(['routes/index_route', 'routes/guides_route']);
答案 1 :(得分:0)
如果我没有正确地解决您的问题,请使用'套餐' require.config的属性可以帮助你,
保持您的公共文件不变,即
File common.js
define(['routes/index_route', 'routes/guides_route'], function() {});
像,
options: {
paths: ...,
packages: [{
name: 'routes/common', // or 'routes' or anything
location: 'routes',
main: 'common'
}],
....
}
然后,您可以直接在您的' router.js'中使用该模块的名称。文件。
我这样做是为多个文件创建一个命名模块,包括加载包主文件中的所有子模块。
编辑:
您也可以省略'名称'包的属性如果你想要的话。在这种情况下,您可以重命名' common.js' to' main.js'因为它是包的入口点的标准名称。因此,重命名& common.js' to' main.js'它可以成为,
options: {
paths: ...,
packages: ['routes'],
....
}
有关更多说明/选项,请参阅以下网址