在r.js构建文件中加载ngmin失败

时间:2014-02-04 09:04:36

标签: node.js angularjs requirejs npm

我正在尝试ngmin requirejs r.js ngmin之后requirejs使用npm,但由于某种原因,我无法让它工作。我已在全局和本地安装了ngminonBuildRead()NODE_PATH,这些选项都没有在nodejs中正确加载({ mainConfigFile: './static/js/boot.js', baseUrl: './static/js', name: 'boot', include: 'require.js', out: './static/js/main-built.js', normalizeDirDefines: 'all', onBuildRead: function (moduleName, path, contents) { var ngmin = require('ngmin'); console.log(ngmin); // ngmin is undefined return ngmin.annotate(contents); // no method annotate of undefined } }) 。我还导出了{{1}},但这也无济于事。

构建文件在没有提供隔离问题的钩子函数的情况下工作,但我不是{{1}}专家,所以我不知道如何进一步解决这个问题。任何帮助表示赞赏。

{{1}}

1 个答案:

答案 0 :(得分:1)

看来,你试图在r.js的构建配置文件中调用nodejs的require。但是这个文件只是一个配置 - 它不是由节点执行的 - 它只能由r.js优化器读取。您可以通过以下方式将构建配置包装到Grunt任务中:

  1. 将此文件放入项目的根目录

    <强> Gruntfile.js

    module.exports = function(grunt) {
       'use strict';
        // Project configuration.
        var config = {
    
           requirejs : {
              compile : {
                 options : {
                    mainConfigFile: './static/js/boot.js',
                    baseUrl: './static/js',
                    name: 'boot',
                    include: 'require.js',
                    out: './static/js/main-built.js',
                    normalizeDirDefines: 'all',
                    onBuildRead: function (moduleName, path, contents) {
                        var ngmin = require('ngmin');
                        console.log(ngmin);
                        return ngmin.annotate(contents);
                    }
                 }
               }
            }
        };
    
        grunt.initConfig(config);
    
        // These plugins provide necessary tasks.
        grunt.loadNpmTasks('grunt-contrib-requirejs');
    
        grunt.registerTask('build', ['requirejs:compile']);
    
        // Default task.
        grunt.registerTask('default', ['watch']);
    
    };
    
  2. 通过npm

    全局安装grunt-cli

    npm install -g grunt-cli

  3. 在项目中安装所需的模块

    npm install grunt grunt-contrib-requirejs

  4. 运行默认的grunt任务:

    grunt

  5. 这将需要任务。由于Grungfile.js是普通的CommonJs模块,因此您可以轻松使用其中的任何npm模块。关于Grunt的更多信息here

    在了解了更多有关grunt之后,请参阅this plugin - 如果您决定使用grunt,我认为它在当前环境中可能很有用。