web-dev-qa-db-ja.com

django npm and node packages architecture

私が参加しているプロジェクトでは、これはnode_packagesのアーキテクチャです。

|- Django project
|-- app1
|-- app2
|-- node_modules
|--- foundation-sites
|--- grunt
|-- static
|--- css
|--- images
|--- js
|--urls.py
|--settings.py
|--package.json

私は個人的にnode_packagespackage.jsonフォルダーと同様にjsフォルダーの下のstaticにあるべきだと思います:

|- Django project
|-- app1
|-- app2
|-- static
|--- css
|--- images
|--- js
|---- node_modules
|----- foundation-sites
|----- grunt
|---- packages.json
|--urls.py
|--settings.py

違いはありますか?どちらがベストプラクティスですか?どうして?

21
elad silver

すべてのjavascript関連ファイルを1か所に保存したいというあなたの考えを理解していますが、ここにnode_modulesフォルダーとpackage.jsonファイルDjangoアプリのstaticディレクトリから。

  1. おそらく、意図しないファイルを静的に提供することになります。 If node_modulesフォルダーは実稼働環境に存在し、collectstaticを実行するたびに同期していることを確認する必要があります。これは、ノードの依存関係構造がネストされているために時間がかかる場合があります。また、JSをバンドルしてトランスパイルするビルドステップがある場合、それらのソースファイルがstatic内にある場合、理由もなく静的ファイルとしても提供されます。
  2. JavaScriptのビルドプロセス以外にもノードを使用したい場合があります。 Gruntを使用しているようです。css、またはDjango devサーバーがファイルを変更したとき、またはDjangoサーバーが再起動したときにブラウザーを自動リロードします。念頭に置いて、Node.jsをプロジェクトのどの部分にも触れることができるビルドプロセスのツールとして考える方が理にかなっているかもしれません。JavaScriptのバンドル/トランスコンパイルはその一部にすぎません。
27
joslarson
  • npm_modulesおよびpackage.jsonプロジェクトのトップレベルで:

    • 簡単にアクセスできるため、プロジェクトの最上位でモジュールをインストールしてコマンドを実行します
    • 最上位レベルで公開される依存関係、通常はpip要件
    • コードから分離された外部ライブラリ/モジュール
  • 追加 npm_modulesから.gitignore
  • 生成されたファイルのみを提供します。ソースコードをSTATICFILES_DIRS

  • (オプション)(bowerの代わりに)ベンダーなしでnpmモジュールを提供する場合は、 Django-npm などのツールを使用して、何を公開するかを指定します

サンプルプロジェクト:

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

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

10
zxzak

一般的に、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ディレクトリ。

5
turbotux