2016-04-29 26 views
-1

Ich kann nicht bundles in der optimierten Build arbeiten, ich versuche, einige externe vorkonfektionierte Bundle (nicht in der erforderlichen Build-Prozess-Ausgabe enthalten) zu laden.requirejs und vorgefertigte Bundles

In requirejs.config:

paths: { 
    'mymodules': '../lib/test-bundle/test-bundle' 
}, 
bundles: { 
    'mymodules': ['mymodule1', 'mymodule2'] 
} 

test-bundle Gehalt:

console.log("defining modules..."); 

define('mymodule1', ['jquery'], function($) { 
    console.log('within mymodule1', $.fn.jquery); 
    return { 
     test: 'module1' 
    }; 
}); 

define('mymodule2', ['jquery'], function($) { 
    console.log('within mymodule2', $.fn.jquery); 
    return { 
     test: 'module2' 
    }; 
}); 

Im build Configpaths für mymodules, mymodule1 und mymodule2 zu empty: gesetzt sind (oder den Erstellungsprozess fehlschlägt), Ich verwende nicht die modules Option in der Build-Konfiguration zum Generieren von Bündeln.

Wenn ich die Quellen verwende, wie sie sind, funktioniert alles gut, wie erwartet.

in der gebauten Version (aber nicht optimiert) test-bundle geladen und "defining modules" gedruckt, dann Timeout Laden mymodule2:

Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2(…) 
Uncaught Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2 
http://requirejs.org/docs/errors.html#timeout 

im eingebauten und optimierte Version gibt es einen weiteren Fehler:

Uncaught ReferenceError: define is not defined 

wie wenn test-bundle geladen wird vor requirejs implementieren define().

Was ich vermisse oder falsch mache?

bearbeiten

Ich habe einen Zweig mit dem Test oben zu installieren und bauen

git clone https://github.com/xenogenesi/HTMLStarterKitPro 
cd HTMLStarterKitPro 
git checkout test-bundle 
# nodejs npm required on the system (maybe grunt-cli) 
npm install # required only once to install node modules 
grunt build-only # create a build/ directory and the content 
php -S localhost:8888 # to publish the sources as they are 
# browse to http://localhost:8888 
php -S localhost:7777 -t build # to publish the built versions 
# browse to http://localhost:7777 for built but not optimized 
# browse to http://localhost:7777/index2.html for built optimized 

(siehe this commit für alle Dateien (nodejsnpm und wahrscheinlich grunt-cli werden auf dem System erforderlich) erstellt modifiziert, um das Test-Bündel hinzuzufügen)

+0

Ein [MCVE] wäre hilfreich. Welche Version von RequireJS benutzt du? Neuere Versionen beheben Fehler in den älteren Versionen. – Louis

+0

@Louis, die Bereitstellung eines minimalen Beispiel würde erfordern einen Zeitaufwand und die Umgebung wäre nicht die gleiche, also, sehen Sie bitte das Update, wenn Sie wissen, wie Knoten installieren, Npm, Grunt-CLI sollte schnell und einfach sein. RequireJS Version ist 2.2.0 – Alex

Antwort

0

Sie können nur eine Definition pro Datei verwenden. Wenn Sie trotzdem möchten, gibt es eine Paketkonfigurationsoption, die besagt, dass ein Modul in einer bereits gebündelten Datei enthalten ist.

Wie es heißt:

bundle config is for pointing multiple module IDs to a bundle's module ID. 
+0

Danke, ich habe meine Konfiguration zu einem * Modul ID * anstelle eines Pfades und fügte es auf 'Pfade', aber das Ergebnis nicht geändert, werde ich die Frage zu aktualisieren – Alex

-1

Also, anscheinend sogar require.js Sein selbst, wenn der Lader in der optimierten Version enthalten ist oder zumindest in einer anderen Art und Weise verhalten.

Eine einfache Möglichkeit, es zum Laufen zu bringen ist keinen Lader aufzunehmen und zu halten Kickstart verwenden, erfordern:

Gruntfile.js:

- name: 'requireLib', 
+ name: false, 

index2.html:

- <script src="app/main-built.js"></script> 
+ <script src="lib/require/require.js" data-main="app/main-built"></script> 

Dennoch, wenn jemand wissen, wie man den Loader einbaut und vorgefertigte externe Bundles (mehrere Module in einer Datei) arbeiten lässt, würde ich gerne wissen und als Antwort akzeptieren.