Sur le projet que je rejoins, c'est l'architecture du node_packages
:
|- Django project
|-- app1
|-- app2
|-- node_modules
|--- foundation-sites
|--- grunt
|-- static
|--- css
|--- images
|--- js
|--urls.py
|--settings.py
|--package.json
Je pense personnellement que node_packages
doit se trouver dans le répertoire statique sous le dossier js
ainsi que le package.json
ainsi:
|- Django project
|-- app1
|-- app2
|-- static
|--- css
|--- images
|--- js
|---- node_modules
|----- foundation-sites
|----- grunt
|---- packages.json
|--urls.py
|--settings.py
y a-t-il une différence? quelle est la meilleure pratique? Pourquoi?
Je comprends que vous pensiez vouloir conserver tous les fichiers liés au javascript en un seul endroit, mais voici quelques raisons pour lesquelles vous voudrez peut-être conserver le node_modules
dossier et le package.json
fichier hors d'un répertoire Django app static
de l'application.
node_modules
le dossier existe dans votre environnement de production, l'exécution de collectstatic
devra vérifier qu'il est synchronisé à chaque fois, ce qui peut être lent en raison de la structure de dépendance imbriquée des nœuds. Et en supposant que vous ayez une étape de construction pour regrouper et transpiler votre JS, si ces fichiers source sont dans static
, ils seront également servis en tant que fichiers statiques, sans aucune raison.css
, ou en exécutant un serveur proxy autour de votre Django qui recharge automatiquement votre navigateur lorsque les fichiers changent ou le serveur Django redémarre. Avec ceci à l'esprit, il pourrait être plus logique de considérer Node.js comme un outil dans votre processus de construction qui pourrait toucher n'importe quelle partie de votre projet, le regroupement/transpilage de JavaScript n'en étant qu'une partie.Mettez npm_modules
et package.json
au plus haut niveau de votre projet:
npm_modules
à .gitignore
Servir uniquement les fichiers générés. Gardez votre code source en dehors de STATICFILES_DIRS
(Facultatif) Si vous souhaitez servir certains modules npm sans vendeur (au lieu de bower), utilisez un outil comme Django-npm pour spécifier ce qui sera exposé
Exemples de projets:
En général, le node_modules
doit être en dehors de l'application Django. Le format typique que j'utilise pour une application Django est le suivant:
- AppName
---- appname (This is the Django Project)
---- appname-env (Python virtualenv)
---- bower_components
---- bower.json
---- gulpfile.js
---- node_modules
---- package.json
---- requirements.txt
Ensuite, j'utilise gulp pour copier les composants des modules de noeud ou des composants de bower dans mon application static/lib
répertoire.