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目录。

  1. 您可能最终会静态地提供不符合要求的文件。 如果您的生产环境中存在node_modules文件夹,则运行collectstatic时必须检查每次是否同步,由于节点嵌套依赖关系结构,运行速度可能较慢。 假设你有一个构build步骤来捆绑和传输你的JS,如果这些源文件是static ,它们也将被作为静态文件,没有任何理由。
  2. 您可能想要使用节点不仅仅是您的JavaScript构build过程。 我看到你正在使用Grunt,你可能想要使用它来超出你的JavaScript需求,比如缩小你的css ,或者在你的Django dev服务器上运行一个代理服务器,当文件改变时自动重新载入你的浏览器,或者Django服务器重新启动。 考虑到这一点,将Node.js作为构build过程中可能触及项目任何部分的工具,可能更有意义,JavaScript的捆绑/转换只是其中的一部分。
  • npm_modulespackage.json放在项目的顶层:

    • 易于访问,您可以在项目的顶层安装模块并运行命令
    • 在顶层暴露的依赖,通常与点子要求一起
    • 外部库/模块从您的代码分离
  • npm_modules添加到.gitignore
  • 只生成生成的文件。 将源代码保存在STATICFILES_DIRS之外

  • (可选)如果你想在不需要代理服务的情况下提供一些npm模块(而不是bower),可以使用像django-npm这样的工具来指定要显示的内容

示例项目:

https://github.com/mbrochh/django-reactjs-boilerplate

https://github.com/Seedstars/django-react-redux-base

一般来说, 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目录中。