Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 名为模块错误的requirejs优化器_Javascript_Ruby On Rails_Node.js_Requirejs_Amd - Fatal编程技术网

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([])语法。您是否有一个真实的示例,我不清楚
main.js
文件中包含了什么,以及这与没有
packages
配置有何不同。同样,这也不能回答我最初的问题,也就是说,如果这是一个优化器错误,或者我出了什么问题?您所面临的不是一个optmizer错误。从逻辑上讲,define用于“定义”模块。若不返回任何内容(若不使用return语句,则包括undefined的隐式返回),则并没有定义模块。所以,优化器认为,若并没有任何结果,那个么就并没有什么可命名的了!在这种情况下,它不会生成命名模块!但在需要的情况下,不需要返回任何东西,因此它在那里工作。