【问题标题】:r.js optimizer not taking from configr.js 优化器未从配置中获取
【发布时间】:2016-01-02 16:20:40
【问题描述】:

我正在使用 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,没有这样的文件或目录 '/home/ubuntu/workspace/ClientApp/domReady.js'

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

【问题讨论】:

    标签: javascript optimization requirejs gulp r.js


    【解决方案1】:

    我终于想通了:

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

    Git Blacklist.json:

    "gulp-module-requirejs": "直接使用 require.js 模块",

    下面是我的配置文件:

    ({
        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 进行缩小

    说明:

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

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

    这救了我。

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

    请参阅此answer 了解如何实现此目的。

    希望这个答案能帮助和我一样陷入困境的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多