Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.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
将requireJS文件与grunt合并_Requirejs_Gruntjs - Fatal编程技术网

将requireJS文件与grunt合并

将requireJS文件与grunt合并,requirejs,gruntjs,Requirejs,Gruntjs,我想结合在一个简单的requireJS解决方案中使用的js 这是我的main.js require.config({ paths: { 'jquery': 'jquery-2.0.3.min', 'dataTable': 'jquery.dataTables' } }); define(['jquery','dataTable'], function($) { 'use strict'; $(function () { $('.tablesorter').da

我想结合在一个简单的requireJS解决方案中使用的js

这是我的main.js

require.config({
paths: {
    'jquery': 'jquery-2.0.3.min',
    'dataTable': 'jquery.dataTables'    
}
});

define(['jquery','dataTable'], function($) {
'use strict';
$(function () {

    $('.tablesorter').dataTable();
});

});
还有我的Grunfile.js

module.exports = function(grunt) {

grunt.initConfig({
requirejs: {
  production: {
    options: {
      name: "main",
      baseUrl: "",
      mainConfigFile: "main.js",
      out: "optimized.js"
    }
  }
}
});

grunt.loadNpmTasks('grunt-contrib-requirejs');

grunt.registerTask('default', 'requirejs'); 

};
当我像这样在html中加载optimized.js时

<script  src="optimized.js"></script>

我明白了
引用错误:未定义require

在包含
优化的.js
之前,必须在页面上包含
require.js

像这样:

<script src="/path/to/require.js"></script>
<script src="/path/to/optimized.js"></script>

我发现requireJS只接受“main”作为数据主src

所以不是

<script data-main="optimized" src="require.js"></script>

除了这个问题之外,我还看了一些评论,首先我看到George Raith提到了代码中的一个问题:您需要包含
require.js

然后您说没有执行
$('.tablesorter').dataTable()。这是因为您使用的是
define
而不是
require
。使用以下命令:

require(['jquery','dataTable'], function($) {
    'use strict';
    $(function () {
        $('.tablesorter').dataTable();
    });
});
调用
define
仅向RequireJS注册模块。它不执行模块。因此,
$('.tablesorter').dataTable()
不会执行也就不足为奇了。您必须使用
require
的形式,它接受回调来完成您想要做的事情

至于将项目中的RequireJS包含到单个文件中,您必须明确地请求它。优化器的文档提供了以下示例:

node ../../r.js -o baseUrl=. paths.requireLib=../../require name=main include=requireLib out=main-built.js
您的配置(根据问题中的配置更新)将如下所示:

grunt.initConfig({
    requirejs: {
        production: {
            options: {
                name: "main",
                baseUrl: "",
                mainConfigFile: "main.js",
                paths: {
                    requireLib: <path to require js>
                },
                out: "optimized.js",
                include: "requireLib"
            }
       }
    }
});
grunt.initConfig({
要求:{
制作:{
选项:{
名称:“主要”,
baseUrl:“”,
mainConfigFile:“main.js”,
路径:{
requireLib:
},
out:“optimized.js”,
包括:“requireLib”
}
}
}
});

(我没有运行此代码,所以请注意拼写错误。)您必须为
requireLib
输入
require.js
文件的路径。我们必须使用
requireLib
作为模块名称,因为
require
是保留的。使用这种配置,您应该只能加载您的
optimized.js
文件。

您在optimized.js之前包含过requireJS吗?像这样?错误已消失,但$('.tablesorter').dataTable()已被删除;不是执行<除非包含
require.js
,否则code>require
不存在。。。至于你的另一个问题,你应该用更多的信息来回答另一个问题。请关闭你的标签,比如so
。但我的问题是我想合并一个requireJS解决方案中的所有js文件,这样我就只有一个js文件…检查一下指南你写道“我发现requireJS只接受'main'作为数据主src”。RequireJS只接受
datamain
$('.tablesorter')的“main”不是真的。dataTable()使用define可以很好地执行。只是当合并到一个文件中时不是这样。当我在safari和chrome中看到页面时,在使用require…1加载dataTables之前会有一个快速切换。在这个评论中,您自相矛盾(也就是说:“错误消失了,但是$('.tablesorter').dataTable();没有执行”)。2.您所说的设置与问题中显示的
main.js
不同。在您的问题中,
define
调用不在单独的文件中。它位于直接加载的
main.js
中。3.你在这里提到的这个场景改变了我的解释。它之所以有效,只是因为在某个地方,您
需要
包含
定义的文件。正是
require
导致任何模块的工厂执行。
node ../../r.js -o baseUrl=. paths.requireLib=../../require name=main include=requireLib out=main-built.js
grunt.initConfig({
    requirejs: {
        production: {
            options: {
                name: "main",
                baseUrl: "",
                mainConfigFile: "main.js",
                paths: {
                    requireLib: <path to require js>
                },
                out: "optimized.js",
                include: "requireLib"
            }
       }
    }
});