django npm和节点包的体系结构
在我join的项目中,是node_packages
的体系结构:
|- Django project |-- app1 |-- app2 |-- node_modules |--- foundation-sites |--- grunt |-- static |--- css |--- images |--- js |--urls.py |--settings.py |--package.json
我个人认为node_packages
应该在js
文件夹下的静态以及package.json
如下所示:
|- Django project |-- app1 |-- app2 |-- static |--- css |--- images |--- js |---- node_modules |----- foundation-sites |----- grunt |---- packages.json |--urls.py |--settings.py
有没有区别? 这是最好的做法? 为什么?
我明白你想要保留所有的JavaScript相关的文件在一个地方的想法,但这里有几个原因,你可能想保留node_modules
文件夹和package.json
文件的Django应用程序的static
目录。
- 您可能最终会静态地提供不符合要求的文件。 如果您的生产环境中存在
node_modules
文件夹,则运行collectstatic
时必须检查每次是否同步,由于节点嵌套依赖关系结构,运行速度可能较慢。 假设你有一个构build步骤来捆绑和传输你的JS,如果这些源文件是static
,它们也将被作为静态文件,没有任何理由。 - 您可能想要使用节点不仅仅是您的JavaScript构build过程。 我看到你正在使用Grunt,你可能想要使用它来超出你的JavaScript需求,比如缩小你的
css
,或者在你的Django dev服务器上运行一个代理服务器,当文件改变时自动重新载入你的浏览器,或者Django服务器重新启动。 考虑到这一点,将Node.js作为构build过程中可能触及项目任何部分的工具,可能更有意义,JavaScript的捆绑/转换只是其中的一部分。
-
把
npm_modules
和package.json
放在项目的顶层:- 易于访问,您可以在项目的顶层安装模块并运行命令
- 在顶层暴露的依赖,通常与点子要求一起
- 外部库/模块从您的代码分离
- 将
npm_modules
添加到.gitignore
-
只生成生成的文件。 将源代码保存在
STATICFILES_DIRS
之外 -
(可选)如果你想在不需要代理服务的情况下提供一些npm模块(而不是bower),可以使用像django-npm这样的工具来指定要显示的内容
示例项目:
一般来说, node_modules
应该在Django应用程序之外。 我用于Django应用程序的典型格式如下:
- AppName ---- appname (This is the Django Project) ---- appname-env (Python virtualenv) ---- bower_components ---- bower.json ---- gulpfile.js ---- node_modules ---- package.json ---- requirements.txt
然后,我使用gulp将来自节点模块或凉亭组件的组件复制到我的应用程序的static/lib
目录中。