Bien qu'il existe d'excellentes solutions pour gérer les dépendances côté serveur, je n'en ai trouvé aucune qui réponde à tous mes besoins pour avoir un workflow de gestion des dépendances JavaScript côté client cohérent. Je souhaite répondre à ces 5 exigences:
- Gérer mes dépendances côté client dans un format similaire à NPM de package.json ou Bower d »
bower.json
- Il devrait avoir la possibilité de pointer vers git repo ou des fichiers js réels (sur le Web ou localement) dans mon
dependency.json
fichier pour les bibliothèques moins connues (npm vous permet de pointer vers git repos) - Il devrait minimiser et nommer toutes les bibliothèques dans un seul fichier comme ender - c'est le seul fichier js que j'aurais besoin de mettre dans ma
<script>
balise côté client - Il devrait avoir un support prêt à l'emploi pour CoffeeScript comme BoxJS 4 (maintenant mort)
Dans le navigateur, je devrais pouvoir utiliser soit le style requis :
var $ = require('jquery'); var _ = require('underscore');
Ou mieux encore, faites le style headjs :
head.js(['jquery', 'underscore', 'mylib'], function($, _, mylib) { // executed when all libraries are loaded });
S'il n'existe aucun outil unique de ce type, quelle est la meilleure combinaison d'outils, c'est-à-dire une chaîne d'outils que je peux combiner en utilisant quelque chose comme volo (ou grunt )?
J'ai déjà recherché tous les outils auxquels je me suis associé ici et ils ne satisfont que jusqu'à 3 de mes exigences au mieux individuellement. Alors, veuillez ne pas publier à nouveau sur ces outils. Je n'accepterais qu'une réponse qui fournisse un seul outil qui répond à mes 5 exigences ou si quelqu'un publie un exemple de flux de travail / script / de travail concret d'une chaîne d'outils de plusieurs de ces outils qui répond également à toutes mes exigences. Je vous remercie.
la source
require
syntaxe du nœud au navigateur, pensez à browserifyRéponses:
require.js fait tout ce dont vous avez besoin.
Ma réponse à cette question peut vous aider
Exemple:
Hiérarchie du projet d'application cliente:
main.js est l'endroit où vous initialisez votre application cliente et configurez require.js:
Les dépendances utiliseront le plugin cs lorsque précédé de "cs!". Le plugin cs compile le fichier coffeescript.
Quand vous allez en prod, vous pouvez pré-compiler votre projet entier avec r.js .
Voici vos besoins:
Gérez mes dépendances côté client dans un format similaire à package.json de npm ou component.json de bower. Différent mais aussi bon!
Je devrais avoir la possibilité de pointer vers git repo ou des fichiers js réels (sur le Web ou localement) dans mon fichier dependency.json pour les bibliothèques moins connues (npm vous indiquons les dépôts git). OUI
Il devrait minimiser et nommer toutes les bibliothèques dans un seul fichier comme ender - c'est le seul fichier js que j'aurais besoin de mettre dans mon script-tag côté client. OUI avec r.js.
Il devrait avoir un support prêt à l'emploi pour coffeescript comme Box. OUI
Dans le navigateur, je peux utiliser require style ou headjs. OUI
la source
r.js
, puis-je simplement extraire des versions non minifiées de toutes les bibliothèques ou comment choisir entre des bibliothèques minifiées et non minifiées?http://requirejs.org/ est celui que vous recherchez je crois
la source
En tant que @ Guillaume86, je pense que l'ourlet vous mènera au plus près de l'endroit où vous voulez être.
Dans les dépendances de l'ourlet sont gérées en utilisant une combinaison de npm et d'ourlet. Utilisez npm pour installer explicitement toutes les dépendances externes de vos projets. Utilisez hem pour spécifier les dépendances (externes et locales) à assembler pour vos opérations côté client.
J'ai créé un projet squelette pour que vous puissiez voir comment cela fonctionnerait - vous pouvez le voir sur https://github.com/dsummersl/clientsidehem
Ajouter des dépendances
Utilisez npm pour rechercher une dépendance spécifique, puis modifiez le fichier package.json pour vous assurer que la dépendance sera suivie à l'avenir. Spécifiez ensuite la dépendance de votre application dans slug.json.
Par exemple, supposons que vous vouliez ajouter la dépendance coffee-script. Utilisez simplement npm pour installer la dépendance et enregistrez-la dans votre fichier package.json:
Supposons que vous vouliez inclure votre propre module 'bloomfilters' et qu'il n'était pas dans le registre npm. Vous pouvez l'ajouter à votre projet de la manière suivante:
Modules locaux
Si vous souhaitez inclure votre propre café ou javascript, vous pouvez le faire en ajoutant ces fichiers au dossier app /. Notez que pour exposer votre script via la méthode 'require', vous devez en faire un module CommonJS. C'est très simple - voir la documentation sur l'ourlet .
Fichiers locaux
Si vous souhaitez inclure du code non-CommonJS non "requis", vous pouvez également l'assembler en référençant votre javascript ou coffeescript personnalisé via la liste "libs" dans slug.json.
CSS
Hem assemblera également votre CSS, si vous le souhaitez. Voir la documentation sur l'ourlet .
Bâtiment
Une fois que vous avez répertorié vos dépendances, vous pouvez utiliser l'ourlet pour les assembler.
Remarques
Hem était destiné au projet spinejs - mais vous n'êtes pas obligé de l'utiliser pour cela. Ignorez tous les documents mentionnant la colonne vertébrale comme vous le souhaitez ...
la source
Eh bien, je suis surpris que personne n'ait encore mentionné Browserify .
la source
napa
ou non? npmjs.org/package/napaJe suis presque sûr que Hem répond à vos besoins (j'utilise un fork personnel avec des compilateurs supplémentaires - jade et stylet - il est facile à personnaliser selon vos besoins). Il utilise npm pour gérer les dépendances.
la source
Vous voudrez peut-être jeter un oeil à Yeoman , qui utilise plusieurs techniques pour vous aider avec vos besoins.
Prise en charge intégrée de CoffeeScript, Compass et plus encore. Fonctionne avec r.js ( RequireJS ), unittesting etc.
Quant à vos exigences:
Toutes les fonctionnalités:
la source
Bower peut convenir à vos besoins (1) et (2) pour le reste dont vous avez besoin. Depuis le readme:
Pour installer un package:
la source
Regardez le gestionnaire de paquets Jam . Voici la description de sa page d'accueil
Cela ressemble beaucoup à npm dans son fonctionnement.
Installez le package comme ci-dessous
garder les paquets à jour en exécutant
Optimiser les packages pour la production
Les dépendances Jam peuvent être ajoutées dans le
package.json
fichier.Pour une documentation complète, lisez la documentation Jam
la source
Je viens de tomber sur inject.js
Certaines des fonctionnalités, du site du projet :
la source
Il existe plusieurs options:
Le composant peut également être intéressant, il ne gère pas les dépendances en soi, mais vous permet d'utiliser des versions hachées de bibliothèques autrement volumineuses.
la source
J'utilise ourlet avec npm, et je voulais ajouter des avantages supplémentaires qui, je pense, n'étaient pas couverts jusqu'à présent.
hem build
sauf si je publie une application.cake
méthode ci-dessus, vous pouvez simplement créer un lien direct vers coffeescript à partir de projets dépendants.eco
(Coffeescript intégré) pour les vues et Stylus pour CSS, et compile tout cela, avec votre Coffeescript, dans un fichier JS et un fichier CSS.Voici une liste de base pour la configuration avec une application Spine, ourlet, coffeescript. N'hésitez pas à ignorer les parties de la colonne vertébrale. En fait, j'utilise parfois
spine app
pour configurer une structure de répertoires pour une application non-Spine, puis j'éditeslug.json
pour passer à une structure de compilation différente.curl http://npmjs.org/install.sh | sh
sur un système * nix. Je suppose qu'il est disponible à partir de la ligne de commande.npm install -g hem
). Le développement s'est ramifié ces derniers temps, vous voudrez peut-être le sortir directement de github ( https://github.com/spine/hem ), extraire une branche etnpm install -g .
dans ce dossier.npm install -g spine.app
rendra spine disponible en tant que commande globalespine app folder
fera un projet de la colonne vertébrale appeléapp
àfolder
, générer la bonne structure de répertoire et un tas de fichiers squelette pour commencer.cd
dans le dossier et modifiezdependencies.json
les bibliothèques dont vous avez besoin. Ajoutez-les pourslug.json
que l'ourlet sache également où les trouver.npm link
n'importe lequel de vos packages locaux en développement dansnode_modules
, et vous pouvez les ajouter àslug.json
for hem (soit unindex.js
pour l'inclure directement, soit unindex.coffee
si vous voulez que Hem le compile.)npm install .
pour télécharger toutes les dépendances que vous venez de saisir.Si vous jetez un œil à la configuration de spine par défaut,
app/lib/setup.coffee
vous trouverezrequire
toutes les bibliothèques dont vous avez besoin à partir de vos dépendances. Exemples:Dans
index.coffee
, vous venez derequire lib/setup
charger le contrôleur principal de votre application. De plus, vous avez besoin derequire
toutes les autres classes de ces autres contrôleurs. Vous pouvez utiliserspine controller something
ouspine model something
pour générer des modèles pour les contrôleurs et les modèles. Le contrôleur Spine typique ressemble à ce qui suit, en utilisant les nœudsrequire
:La valeur par défaut générée
index.html
convient généralement pour charger votre application, mais modifiez-la si nécessaire. Selon vos besoins, il extrait uniquement unjs
et uncss
fichier, que vous n'avez jamais besoin de modifier.css
dossier. C'est beaucoup plus flexible que CSS :)folder
, exécutezhem server
pour démarrer un serveur Hem et accédez àlocalhost:9294
pour voir votre application. (Si vous avez installé hem globalement.) Il a des arguments cachés, par exemple--host 0.0.0.0
écoute sur tous les ports.Une dernière chose: normalement, se
hem server
mettra à jour automatiquement lorsque vous mettez à jour votre code et enregistrez les fichiers, ce qui facilite le débogage. L'exécutionhem build
compilera votre application en deux fichiersapplication.js
, qui sont minifiés etapplication.css
. Si vous exécutezhem server
après cela, il utilisera ces fichiers et ne se mettra plus à jour automatiquement. Donc, pashem build
avant d'avoir réellement besoin d'une version minifiée de votre application pour le déploiement.Références supplémentaires: Spine.js & hem pour commencer
la source
Voici une solution qui adopte une approche très différente: regrouper tous les modules dans un objet JSON et exiger des modules en lisant et en exécutant le contenu du fichier sans demandes supplémentaires.
Implémentation de démonstration pure clientide: http://strd6.github.io/editor/
https://github.com/STRd6/require/blob/master/main.coffee.md
STRd6 / require dépend de la disponibilité d'un package JSON au moment de l'exécution. La
require
fonction est générée pour ce package. Le package contient tous les fichiers dont votre application pourrait avoir besoin. Aucune autre requête http n'est effectuée car le package regroupe toutes les dépendances. C'est aussi proche que possible du style Node.js requis sur le client.La structure du package est la suivante:
Contrairement à Node, un package ne connaît pas son nom externe. C'est au pacakge, y compris la dépendance, de le nommer. Cela fournit une encapsulation complète.
Compte tenu de toute cette configuration, voici une fonction qui charge un fichier à partir d'un package:
Ce contexte externe fournit des variables auxquelles les modules ont accès.
Une
require
fonction est exposée à des modules et peuvent donc nécessiter d'autres modules.Des propriétés supplémentaires telles qu'une référence à l'objet global et certaines métadonnées sont également exposées.
Enfin, nous exécutons le programme dans le module et le contexte donné.
Cette réponse sera très utile à ceux qui souhaitent avoir une instruction de type node.js synchrone dans le navigateur et ne sont pas intéressés par les solutions de chargement de scripts à distance.
la source
Vérifiez cartero si vous utilisez node / express sur le backend.
la source
Je suggérerais de consulter la boîte à outils dojo qui semble répondre à la plupart de vos besoins. Celui dont je ne suis pas sûr est CoffeeScript.
dojo fonctionne avec des modules écrits au format AMD (Asynchronous Module Definition). Il a un système de construction avec des packages et vous pouvez les agréger dans un ou plusieurs fichiers (appelés couches). Apparemment, il accepte les dépôts de type git, plus de détails sur le système de construction ici:
http://dojotoolkit.org/documentation/tutorials/1.8/build/
Pour mémoire, la version bêta de la v1.9 est attendue le mois prochain.
la source
Un autre framework qui satisfait à tous mes critères publié récemment: http://duojs.org/ (et prend également en charge le traitement d'autres ressources comme CSS comme des dépendances).
la source
l'injection de dépendances avec chargement asynchrone + browserify sera un autre bon choix, comparé à requirejs
gestion-des-dépendances-asynchrones-frontales-sans-AMD
la source