【问题标题】:Load ngmin in r.js build file fails在 r.js 构建文件中加载 ngmin 失败
【发布时间】:2014-02-05 03:39:13
【问题描述】:

我正在尝试在requirejsr.js 中使用ngmin,在this 之后,但由于某种原因我无法让它工作。我已经在全局和本地安装了ngminrequirejsnpm,并且这些选项都没有在onBuildRead() 中正确加载ngmin。我也导出了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
    }
})

【问题讨论】:

    标签: node.js angularjs requirejs npm


    【解决方案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

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

    了解更多关于 grunt 的信息后,请参阅 this plugin - 如果您决定使用 grunt,我认为它在当前情况下可能很有用。

    【讨论】:

    • 谢谢。我试图避免安装 grunt(又一个库),但如果这是唯一的可能性,我会尝试一下,让你知道我该怎么做......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2023-03-09
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2022-08-16
    • 2014-12-10
    相关资源
    最近更新 更多