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 不兼容.
"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: 使用此选项指出您定义
paths
、shims
、deps
等的文件。 RequireJs 足够智能,可以从这个声明中挑选配置进行处理(他们使用正则表达式模式来过滤这部分,所以要小心。参考他们的DOC)
- name :入口点模块名称。在您的执行程序 kicks-off 中定义它。 PS:如果您有配置并且 EP 是同一个文件,require 将检测到这一点并将
name
添加到您定义的调用中。
- insertRequire: 这将在末尾插入一条 require 语句,这将触发代码的执行。见 DOC.
- findNestedDependencies :指示 require 从入口点文件中选择依赖项。遍历文件并获取最终构建的依赖项。
其余部分不言自明或参考 documentation
嗯,这救了我。
要与 gulp 构建系统一起使用,请参阅 gulp shell
模块,通过此模块,您可以连接构建系统以自动完成整个过程。
参考此 了解如何实现。
希望这个回答能帮助和我一样被困的人!
我正在使用 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 不兼容.
"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: 使用此选项指出您定义
paths
、shims
、deps
等的文件。 RequireJs 足够智能,可以从这个声明中挑选配置进行处理(他们使用正则表达式模式来过滤这部分,所以要小心。参考他们的DOC) - name :入口点模块名称。在您的执行程序 kicks-off 中定义它。 PS:如果您有配置并且 EP 是同一个文件,require 将检测到这一点并将
name
添加到您定义的调用中。 - insertRequire: 这将在末尾插入一条 require 语句,这将触发代码的执行。见 DOC.
- findNestedDependencies :指示 require 从入口点文件中选择依赖项。遍历文件并获取最终构建的依赖项。
其余部分不言自明或参考 documentation
嗯,这救了我。
要与 gulp 构建系统一起使用,请参阅 gulp shell
模块,通过此模块,您可以连接构建系统以自动完成整个过程。
参考此
希望这个回答能帮助和我一样被困的人!