Javascript 名为模块错误的requirejs优化器
我想定义一个模块,它不做任何事情,只需要其他模块,以确保它们被包括在内。像这样:Javascript 名为模块错误的requirejs优化器,javascript,ruby-on-rails,node.js,requirejs,amd,Javascript,Ruby On Rails,Node.js,Requirejs,Amd,我想定义一个模块,它不做任何事情,只需要其他模块,以确保它们被包括在内。像这样: File: common.js define(['routes/index_route', 'routes/guides_route']);``` File common.js define(['routes/index_route', 'routes/guides_route'], function() {}); r、 js输出为: define(['routes/index_route', 'routes/
File: common.js
define(['routes/index_route', 'routes/guides_route']);```
File common.js
define(['routes/index_route', 'routes/guides_route'], function() {});
r、 js输出为:
define(['routes/index_route', 'routes/guides_route']);
这是错误的,因为它应该输出一个命名模块
但是,如果我使用如下伪函数回调来定义它:
File: common.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行话的问题,所以我会定义我的问题
我有一个router.js,其中包括所有模块
File: router.js
define(['routes/index_route', 'routes/guides_route', 'routes/other_route'],
function() {
});
我包括了所有这些路线
('index\u route,guides\u route'),但我真的不需要任何参考资料。所以不包括一堆
routes
在router.js中这样,我想将所有这些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(){})
之间的区别是
require函数立即被调用,define函数只有在其他模块需要它时才被调用
所以
如果要请求模块,则需要使用require insead of define
没有意义
TL;DR请告诉我:
define(['module']);
define(['module'], function() {})
就优化器如何对其进行操作而言。这将告诉我为什么优化器在两种情况下输出不同
define(['module']);
define('filename', ['module']);
如果我陷入了某种陷阱,请多透露一些信息,否则请不要用噪音进一步混淆我。r.js行为正常。如果要请求模块,则需要使用
require
而不是define
require(['routes/index_route', 'routes/guides_route']);
如果我正确理解您的问题,使用require.config的“packages”属性将有助于您 保持您的公共文件不变,即
File common.js
define(['routes/index_route', 'routes/guides_route'], function() {});
像
然后,您可以直接使用模块的名称将其添加到“router.js”文件中
我这样做是为了为多个文件创建一个命名模块,包括加载包主文件中的所有子模块
编辑:
如果需要,还可以省略包的“name”属性。在这种情况下,您可以将“common.js”重命名为“main.js”,因为它是包入口点的标准名称。因此,将“common.js”重命名为“main.js”可以成为
options: {
paths: ...,
packages: ['routes'],
....
}
有关更多说明/选项,请参阅以下URL
当您说“这是错误的,因为它应该输出一个命名的模块”,这有什么关系?你是说
define(['routes/common'],function(){})当优化器未将模块命名为路由/公共
?@sahbeewah当优化器未命名模块时,它无法在浏览器中找到路由/公共
模块,并给出错误信息。如果我省略函数(){}
,它就不起作用,否则它会正确命名模块
像这样,它应该加载routes/common
中的所有依赖项。无论如何,我不明白为什么我必须为此使用额外的配置?当您将文件重命名为main.js
时,优势更为明显,它还定义了使用该主文件的目的。通过查看require配置,您可以看出routes
文件夹内部可能使用了一些JS文件,但对于应用程序而言,整个文件夹充当单个实体(即包)。顺便说一句,您还可以使用require([])如果定义空函数不是您想要的,那么在主文件中使用code>语法。您是否有一个真实的示例,我不清楚main.js
文件中包含了什么,以及这与没有packages
配置有何不同。同样,这也不能回答我最初的问题,也就是说,如果这是一个优化器错误,或者我出了什么问题?您所面临的不是一个optmizer错误。从逻辑上讲,define用于“定义”模块。若不返回任何内容(若不使用return语句,则包括undefined的隐式返回),则并没有定义模块。所以,优化器认为,若并没有任何结果,那个么就并没有什么可命名的了!在这种情况下,它不会生成命名模块!但在需要的情况下,不需要返回任何东西,因此它在那里工作。