r.js 优化器没有从配置中获取

r.js optimizer not taking from config

我正在使用 gulp 和 requirejs-optimize

我的init.js

;
(function(require) {

    "use strict";

    //Constants

    require.config({

        paths: {
            "angular": "app/libs/angular/angular.min",
            "domready": "app/libs/domReady/domReady",
            "angular-ui-router": "app/libs/angular-ui-router/release/angular-ui-router.min",
            "angular-bootstrap": "app/libs/angular-bootstrap/ui-bootstrap.min",
            "App": "app/app",
            "angular-animate": "app/libs/angular-animate/angular-animate.min",
            "ui-bootstrap-tpls": "app/libs/angular-bootstrap/ui-bootstrap-tpls.min",
            "enums": "app/enums"
        },
        waitSecond: 0,
        shim: {
            "angular": {
                exports: "angular",
                deps: []
            },

            "angular-ui-router": {
                deps: ["angular"]
            },

            "angular-bootstrap": {
                deps: ["angular"]
            },

            "ui-bootstrap-tpls": {
                deps: ["angular-bootstrap"]
            },

            "domready": {
                deps: []
            },

            "App": {
                deps: ["angular"]
            },

            "angular-animate": {
                deps: ["angular"],
                exports: "angular"
            }
        }
    });

    //This module defines all the Global constants for the app
    define("CONST", [], {
        templatesPath: "views/",
        URL: "https://saltjs-nirus.c9.io/service"
    });

    define(["require", "domready"], function(require, domready) {
        domready(function() {
            require(["angular", "App", "app/router"], function(angular, app) {
                angular.bootstrap(document, ["salt"]);
            });
        });
    });

})(window.requirejs);

我的构建配置文件如下

var gulp = require("gulp");
var requirejsOptimize = require('gulp-requirejs-optimize');

gulp.task('scripts', function() {
    return gulp.src(["./../ClientApp/init.js", "./../ClientApp/app/libs/domReady/domReady.js"])
        .pipe(requirejsOptimize(function(file) {
            return {
                baseUrl: "./../ClientApp/",
                useStrict: true,
                optimize: "uglify",                 
                paths: {
                    "angular": "app/libs/angular/angular.min",
                    "domready": "app/libs/domReady/domReady",
                    "angular-ui-router": "app/libs/angular-ui-router/release/angular-ui-router.min",
                    "angular-bootstrap": "app/libs/angular-bootstrap/ui-bootstrap.min",
                    "App": "app/app",
                    "angular-animate": "app/libs/angular-animate/angular-animate.min",
                    "ui-bootstrap-tpls": "app/libs/angular-bootstrap/ui-bootstrap-tpls.min",
                    "enums": "app/enums"
                },
                shim: {
                    "angular": {
                        exports: "angular",
                        deps: []
                    },

                    "angular-ui-router": {
                        deps: ["angular"]
                    },

                    "angular-bootstrap": {
                        deps: ["angular"]
                    },

                    "ui-bootstrap-tpls": {
                        deps: ["angular-bootstrap"]
                    },

                    "domready": {
                        deps: []
                    },

                    "App": {
                        deps: ["angular"]
                    },

                    "angular-animate": {
                        deps: ["angular"],
                        exports: "angular"
                    }
                }
            }
        }))
        .pipe(gulp.dest('./../build/final.js'));
});

gulp.task("default", ['scripts'])

问题: 当 运行 gulp 我遇到错误

ENOENT, no such file or directory '/home/ubuntu/workspace/ClientApp/domReady.js'

这里 requirejs 优化器没有采用构建配置文件中指定的 path 选项,而是搜索抛出错误的物理路径。我如何强制优化器查找 r.js 构建配置中指定的 path 选项并从那里获取文件进行优化。

最后我想出了办法让它工作:

我从 gulp-optimizer 切换到直接节点 r.js,因为 Gulp 开发人员建议直接使用优化器,因为 r.js 与 gulp 不兼容.

Git Blacklist.json:

"gulp-module-requirejs": "use the require.js module directly",

下面是我的配置文件:

({
    mainConfigFile: "./../ClientApp/app/init.js",
    name: "init",
    baseUrl: "./../ClientApp/app/",
    insertRequire:["init"],
    findNestedDependencies: true,
    out: "./../ClientApp/build/final.js",
    wrap: true,
    optimize: "uglify",
    uglify: {
        toplevel: true,
        ascii_only: true,
        beautify: false,
        max_line_length: 1000,
        defines: {
            DEBUG: ['name', 'false']
        },
        no_mangle: true
    }
});

我正在使用 require.js

提供的 uglify 进行缩小

解释:

  • mainConfigFile: 使用此选项指出您定义 pathsshimsdeps 等的文件。 RequireJs 足够智能,可以从这个声明中挑选配置进行处理(他们使用正则表达式模式来过滤这部分,所以要小心。参考他们的DOC
  • name :入口点模块名称。在您的执行程序 kicks-off 中定义它。 PS:如果您有配置并且 EP 是同一个文件,require 将检测到这一点并将 name 添加到您定义的调用中。
  • insertRequire: 这将在末尾插入一条 require 语句,这将触发代码的执行。见 DOC.
  • findNestedDependencies :指示 require 从入口点文件中选择依赖项。遍历文件并获取最终构建的依赖项。

其余部分不言自明或参考 documentation

嗯,这救了我。

要与 gulp 构建系统一起使用,请参阅 gulp shell 模块,通过此模块,您可以连接构建系统以自动完成整个过程。

参考此 了解如何实现。

希望这个回答能帮助和我一样被困的人!