/ / Optimalizácia Durandal s Gulp a Gulp-Durandal nefunguje - vyžaduje, dulia, durandal, zväzovanie a minifikácia

Durandal optimalizácia s Gulp a Gulp-Durandal nefunguje - vyžaduje, dúšok, durandal, zväzovanie a minification

Vytvárame aplikáciu s programom Durandalčo je v súčasnosti pomerne veľké a momentálne hľadáme zoskupovanie všetkých súborov JS umiestnených v priečinku App do súboru main-built.js. Docela základné a obvyklé veci, myslím.

Používam Gulp s rozšírením Gulp-Durandal, kde náš gulpfile:

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"));
});

A tu je úryvok nášho súboru 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__;

Ako vidíte vo vánkovom filme, nechceme topoužívajte mandľu, ale vyžadujú namiesto nej, z niektorých dôvodov mandľu nepracuje s naším projektom a akokoľvek, dávajeme prednosť požiadavkám, či je na jeho konci väčšia než mandľová. Spustenie príkazu na vytvorenie súboru main-built.js trvalo niekedy, ale na konci som dostal súbor so všetkým v ňom.

Problém je v tom, že keď sa pokúšam načítať aplikáciu, prilepí sa na načítaciu obrazovku. Neprechádza ďalej a v konzole prehliadača neexistujú žiadne chyby.

Vytvoril som nový projekt na strane, aby som otestoval, či bol náš kód trochu chybný a zistil, že to tak nie je. Tento projekt môžete zistiť tu: https://github.com/maroy1986/DurandalGulpBundling

Ak budem stavať tento projekt s mandľou možnosťpravda, všetko funguje dobre, ale ak zmením almužnu, aby som povedal, že gulp používa RequireJs, mám rovnaké správanie ako naša aplikácia. Uviazli ste na načítavacom displeji bez akýchkoľvek chýb.

Takže tu som, čítal som veľa o tejto téme, ale nenašiel som nič, čo by to vyriešilo. Dúfam, že niekto tu už narazí na toto správanie a má riešenie na zdieľanie.

Vďaka!

odpovede:

1 pre odpoveď č. 1

Mala som rovnakú požiadavku a problém. Zdá sa, že require.js nebol volanie hlavného modulu, ktorý spustí aplikáciu Durandal, a preto sa načítava na obrazovke načítania, ktorú som vyriešil implicitným volaním hlavného modulu:

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"));
});

1 pre odpoveď č. 2

Stiahol som si svoj projekt a pokúsil sa ho vybudovať s najnovšími verziami gulp a durandal. Spočiatku to nevytvoril a dal mi nasledujúcu chybu:

 TypeError: Cannot read property "normalize" of undefined

Toto je problém s textovým pluginom rjs a môžete to vyriešiť pridaním nasledujúcich údajov do vášho gulp-súboru (vedľa vlastnosti mandle, minify, výstup ...):

rjsConfigAdapter : function(rjsConfig){
rjsConfig.deps = ["text"];
return rjsConfig;
}

Akonáhle som to urobil, stavba dokončená a ja by som mohol stavať s alebo bez minify, mandľu a vyžadovať a aplikácia funguje dobre.