Gulp 和 Gulp 的 Durandal 优化不工作
Durandal optimization with Gulp and Gulp-Durandal not working
我们正在使用 Durandal 构建一个目前相当大的应用程序,我们目前正在考虑将 App 文件夹中的所有 JS 文件捆绑到一个 main-built.js 文件中。我猜是非常基本和常见的东西。
我正在使用 Gulp 和 Gulp-Durandal 扩展。这是我们的 gulp 文件:
var gulp = require('gulp');
var durandal = require('gulp-durandal');
gulp.task('build-portal', function () {
durandal({
baseDir: 'app',
main: 'main.js',
output: 'main-built.js',
almond: false,
minify: false
}).pipe(gulp.dest('app'));
});
这是我们的 main.js 文件
的片段
require.config({
paths: {
'text': '../Scripts/text',
'durandal': '../Scripts/durandal',
'plugins': '../Scripts/durandal/plugins',
'transitions': '../Scripts/durandal/transitions'
},
shim: {
},
waitSeconds: 0
});
define('jquery', [], function () { return jQuery; });
define('knockout', [], function () { return ko; });
define('ga', function () { return ga; });
define(
["require", "exports", "durandal/app", "durandal/viewLocator", "durandal/system", "plugins/router", "services/logger", "modules/knockout.extensions", "modules/knockout.validation.custom"],
function (require, exports, __app__, __viewLocator__, __system__, __router__, __logger__, __koExtensions__, __koValidationCustom__) {
var app = __app__;
var viewLocator = __viewLocator__;
var system = __system__;
var router = __router__;
正如您在 gulp 文件中看到的那样,我们不想使用 Almond,而是使用 RequireJs,由于某些原因,almond 不适用于我们的项目,无论如何,我们更喜欢 RequireJs,无论它是否大于杏仁在最后。这就是它要刹车的地方。 运行 构建 main-built.js 文件的命令花了一些时间,但最后我得到了包含所有内容的文件。
问题是当我尝试加载应用程序时,它卡在加载屏幕上。它不会再往前走,浏览器控制台中也没有任何错误。
我在旁边新建了一个项目来测试我们的代码是不是有点问题,结果发现可能没有。您可以在这里找到该项目:
https://github.com/maroy1986/DurandalGulpBundling
如果我使用 almond 选项为 true 构建该项目,一切正常,但如果我关闭 almond 以告诉 gulp 使用 RequireJs,我得到与我们的应用程序相同的行为。您卡在了加载屏幕,没有任何错误。
所以我在这里,我确实阅读了很多关于这个主题的内容,但没有找到任何解决这个问题的方法。希望这里有人已经遇到过这些行为并有解决方案可以分享。
谢谢!
我下载了您的项目并尝试使用最新版本的 gulp 和 durandal 构建它。最初它没有构建并给了我以下错误:
TypeError: Cannot read property 'normalize' of undefined
这是 rjs 文本插件的问题,您可以通过将以下内容添加到您的 gulp 文件中(在 almond、minify、output... 属性旁边)来解决此问题:
rjsConfigAdapter : function(rjsConfig){
rjsConfig.deps = ['text'];
return rjsConfig;
}
一旦我这样做了,构建就完成了,我可以使用或不使用 minify、almond 和 require 进行构建,应用程序工作正常。
我有同样的要求和问题。似乎 require.js 没有调用将启动 Durandal 应用程序的主模块,这就是它卡在加载屏幕的原因。我能够通过隐式调用主模块来解决它:
gulp.task("durandal", function() {
return durandal({
baseDir: "app",
main: "main.js",
output: "main-built.js",
almond: false,
minify: true,
rjsConfigAdapter: function(config) {
//Tell requirejs to load the "main" module
config.insertRequire = ["main"];
return config;
}
})
.pipe(gulp.dest("dist"));
});
我们正在使用 Durandal 构建一个目前相当大的应用程序,我们目前正在考虑将 App 文件夹中的所有 JS 文件捆绑到一个 main-built.js 文件中。我猜是非常基本和常见的东西。
我正在使用 Gulp 和 Gulp-Durandal 扩展。这是我们的 gulp 文件:
var gulp = require('gulp');
var durandal = require('gulp-durandal');
gulp.task('build-portal', function () {
durandal({
baseDir: 'app',
main: 'main.js',
output: 'main-built.js',
almond: false,
minify: false
}).pipe(gulp.dest('app'));
});
这是我们的 main.js 文件
的片段require.config({
paths: {
'text': '../Scripts/text',
'durandal': '../Scripts/durandal',
'plugins': '../Scripts/durandal/plugins',
'transitions': '../Scripts/durandal/transitions'
},
shim: {
},
waitSeconds: 0
});
define('jquery', [], function () { return jQuery; });
define('knockout', [], function () { return ko; });
define('ga', function () { return ga; });
define(
["require", "exports", "durandal/app", "durandal/viewLocator", "durandal/system", "plugins/router", "services/logger", "modules/knockout.extensions", "modules/knockout.validation.custom"],
function (require, exports, __app__, __viewLocator__, __system__, __router__, __logger__, __koExtensions__, __koValidationCustom__) {
var app = __app__;
var viewLocator = __viewLocator__;
var system = __system__;
var router = __router__;
正如您在 gulp 文件中看到的那样,我们不想使用 Almond,而是使用 RequireJs,由于某些原因,almond 不适用于我们的项目,无论如何,我们更喜欢 RequireJs,无论它是否大于杏仁在最后。这就是它要刹车的地方。 运行 构建 main-built.js 文件的命令花了一些时间,但最后我得到了包含所有内容的文件。
问题是当我尝试加载应用程序时,它卡在加载屏幕上。它不会再往前走,浏览器控制台中也没有任何错误。
我在旁边新建了一个项目来测试我们的代码是不是有点问题,结果发现可能没有。您可以在这里找到该项目: https://github.com/maroy1986/DurandalGulpBundling
如果我使用 almond 选项为 true 构建该项目,一切正常,但如果我关闭 almond 以告诉 gulp 使用 RequireJs,我得到与我们的应用程序相同的行为。您卡在了加载屏幕,没有任何错误。
所以我在这里,我确实阅读了很多关于这个主题的内容,但没有找到任何解决这个问题的方法。希望这里有人已经遇到过这些行为并有解决方案可以分享。
谢谢!
我下载了您的项目并尝试使用最新版本的 gulp 和 durandal 构建它。最初它没有构建并给了我以下错误:
TypeError: Cannot read property 'normalize' of undefined
这是 rjs 文本插件的问题,您可以通过将以下内容添加到您的 gulp 文件中(在 almond、minify、output... 属性旁边)来解决此问题:
rjsConfigAdapter : function(rjsConfig){
rjsConfig.deps = ['text'];
return rjsConfig;
}
一旦我这样做了,构建就完成了,我可以使用或不使用 minify、almond 和 require 进行构建,应用程序工作正常。
我有同样的要求和问题。似乎 require.js 没有调用将启动 Durandal 应用程序的主模块,这就是它卡在加载屏幕的原因。我能够通过隐式调用主模块来解决它:
gulp.task("durandal", function() {
return durandal({
baseDir: "app",
main: "main.js",
output: "main-built.js",
almond: false,
minify: true,
rjsConfigAdapter: function(config) {
//Tell requirejs to load the "main" module
config.insertRequire = ["main"];
return config;
}
})
.pipe(gulp.dest("dist"));
});