requirejs - 如何使用 yeoman、grunt、usemin 2 和 requirejs?

标签 requirejs gruntjs grunt-usemin grunt-requirejs

我正在尝试使用 Grunt、usemin 2、requirejs 和 uglify。我在构建中观察到,requirejs 没有正确地将我的依赖项包含到我的单个串联构建文件中。当我在/dist 之外运行 index.html 时,在查找“jquery”、“app”和某些第三方 js 文件时会看到错误,或者有时会出现“define is not Defined”。

我阅读了有关 grunt-usemin 的以下问题并删除了 require block ,但这些线程中仍然存在一些问题。

我进行了搜索,发现了这篇文章 How to integrate Yeoman and Requirejs ,这让我明白了,当我从使用 grunt-contrib-requirejs 更改为 grunt-requirejs 时,我看到 Requirejs 优化器正在运行。不幸的是,我仍然看到这些错误:

Uncaught ReferenceError: define is not defined.

我的index.html中有以下内容:

<!-- build:js js/main.js -->
    <script src="bower_components/requirejs/require.js"></script>
    <script src="js/main.js"></script>
<!-- endbuild -->

这是我的 Grunt 文件:http://jsbin.com/futocusu/3/edit?js

第 112 期有人讨论过要就这个主题创建一篇关于使用 Yeoman 的文章,但我认为它还没有写出来。

有没有人找到使用 usemin v2 与 grunt 和 requirejs 在构建时输出到单个 concat+uglify 文件的最佳方法?我也不确定使用 grunt-contrib-requirejs 和 grunt-requirejs 有什么区别以及何时使用哪一个。

最佳答案

看起来您试图对 main.js 做太多事情。

我在 Gruntfile.js 中有以下构建任务

grunt.registerTask('build', [
        'copy', // copies the src directory to dist (htdocs)
        'requirejs', // do an r.js build to concat modular dependencies
        'concat:head', // concats js in the head
        'uglify:head', // compresses js in the head
        'uglify:foot', // compresses js in the foot
        'cssmin', // minifies and concats css
        'usemin', // runs through html and inputs minified js and css
        'clean:afterBuild' // deletes files that are not required for build
    ]);

这里是每个相关的 Grunt 任务(对我来说,这些任务存储在单独的文件中,因为我使用 load-grunt-config)。如果您想在 gruntfile 中使用这些,那么您所需要做的就是获取返回对象中的所有内容,并将其粘贴到 gruntfile 中的任务值中:

复制

module.exports = function (grunt, options) {
    return {
        main: {
            cwd: 'src/',
            src: '**',
            dest: 'dist/',
            expand: true,
            flatten: false
        },
    };
};

requirejs

module.exports = function(grunt, options) {
    return {
        compile: {
            options: {
                appDir: "src/to/require/app",
                baseUrl: "./",
                mainConfigFile: "src/to/require/app/common",
                dir: "dist/to/require/app",
                // build a common layer
                modules: [
                    {
                        "name": "common"
                    }
                ]
            }
        }
    };
};

连接

module.exports = function (grunt, options) {
    return {
        head: {
            /* other stuff */
        },
        foot: {
            src: [
                'dist/to/require/app/some_other_js.js',
                'dist/to/require/app/external/require.js',
                'dist/to/require/app/external/require.text.js',
                'dist/to/require/app/common.js'
            ],
            dest: 'src/to/require/app/compiled_footer_js.js',
        }
    };
};

丑化

module.exports = function (grunt, options) {
    return {
        head: {
            /* other stuff *
        },
        foot: {
            files: {
                'src/to/require/app/compiled_footer_js.min.js': ['src/to/require/app/compiled_footer_js.js']
            }
        }
    };
};

使用分钟

module.exports = function (grunt, options) {
    return {
        html: [            
            'src/path/to/index.html'
        ]
    };
};

关于requirejs - 如何使用 yeoman、grunt、usemin 2 和 requirejs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998166/

相关文章:

javascript - Usemin 不删除 block 语句

javascript - 使用 grunt watch 将多个文件夹从 LESS 编译为 CSS?

javascript - Grunt usemin 无法使用应用程序文件夹内的脚本

javascript - Gulp browserify JS 但替换修订引用,如 gulp-usemin

javascript - requirejs 抛出 404 试图从 karma runner 加载文件

python - Jupyterlab 和 Plotly 离线 : requirejs is not defined

javascript - 保持 angularjs 与应用程序解耦

html - Gruntfile 缩小文件夹的所有 HTML 文件?

gruntjs - Grunt usemin : concatenated JavaScript file not created

javascript - 如何配置 Karma 以使用 requirejs 和 qunit