使用grunt和almond结合使用会导致"define未定义"问题

8
在我的grunt.js文件中,我有以下内容:
requirejs: {
    dist: {
        options: {
            almond: true,
            wrap: true,
            modules: [{name: 'main'}],
            mainConfigFile: "src/js/main.js",
            baseUrl: "src/js",
            dir: "tmp/js",
            inlineText: true,
            preserveLicenseComments: false
        }
    }
}

grunt requirejs:dist 运行后,会在 tmp/js 目录下生成一些压缩文件,其中包括一个名为 main.js 的大文件(所有内容都如预期一样被打包在此文件中)。然而,当我想要像以下这样引入该文件时:

<script type="text/javascript" src="tmp/main.js"></script>

这会导致一个"Uncaught ReferenceError: define is not defined"错误。
使用almond的意图是我不需要加载一个require.js文件来加载我的优化文件 - 有任何想法如何让它工作?
注脚:我已经成功地做到了这一点,除了以前编译了一个main-built.js文件,但现在似乎不再是这种情况了(更新...-.-)。
1个回答

2

我尝试使用以下文件和文件夹设置一个空目录

/grunt.js
/src/js/main.js
/tmp/js

这是我的grunt.js文件:
module.exports = function(grunt) {

    grunt.loadNpmTasks("grunt-requirejs");
    grunt.initConfig({
        requirejs: {
            dist: {
                options: {
                    almond: true,
                    wrap: true,
                    modules: [{name: 'main'}],
                    mainConfigFile: "src/js/main.js",
                    baseUrl: "src/js",
                    dir: "tmp/js",
                    inlineText: true,
                    preserveLicenseComments: false
                }
            }
        }
    });

    grunt.registerTask("default", "requirejs");
};

这是我的main.js文件:

define(function() {
    console.log('hi');
});

我在控制台中运行了以下命令:
npm install grunt
npm install requirejs
npm install grunt-requirejs
grunt --gruntfile grunt.js

Grunt输出内容如下:

Running "requirejs:dist" (requirejs) task
>> RequireJS optimizer finished
Uncompressed size: 14234 bytes.
Compressed size: 1265 bytes gzipped. (2633 bytes minified)

/tmp/js/main.js中生成的文件确实有对almond的引用。但是由于js已被最小化,它没有提到define函数。我的define(调用被重写为n(

我怀疑您可能在最小化的文件之外有调用define的代码。

此外,在我的另一个项目中,我的mainConfigFile仅被引用为配置文件,而不是作为模块加载。


目前不再使用require.js,但我会尽快实现您的建议 - 谢谢您的回答 :) - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接