2017-01-31 10 views
9

node_packagesのためのアーキテクチャです:私は個人的にnode_packagesjsフォルダの下の静的なだけでなく、そのようなpackage.jsonにすべきだと思いますDjangoのNPMとノードパッケージアーキテクチャ

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

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

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

答えて

15

私は1つの場所ですべてのJavaScript関連のファイルを保持したいのあなたの思考を理解するが、ここであなたはDjangoのアプリのstaticディレクトリからnode_modulesフォルダとpackage.jsonファイルを保存しておきたいかもしれない理由のカップルです。

  1. あなたは、意図されていないファイルを静的に配信する可能性があります。node_modulesフォルダーが運用環境に存在する場合、collectstaticを実行すると、毎回同期がとれていることを確認する必要があります。これは、ノードのネストされた依存関係の構造により遅くなる可能性があります。また、JSをバンドルしてトランスビルドするビルドステップがあると仮定すると、それらのソースファイルがstaticの範囲内にある場合、それらも理由なくスタティックファイルとして提供されます。
  2. JavaScriptをビルドする以外にも、nodeを使用すると便利です。あなたがGruntを使っているのを見て、cssを小さくするか、ファイルが変わったときにブラウザを自動的にリロードするDjango devサーバの周りにプロキシサーバを走らせるなど、JavaScriptの必要以上に使いたいかもしれません。 Djangoサーバが再起動します。これを念頭に置いて、Node.jsをプロジェクトのどの部分にも触れるビルドプロセスのツールと考えることがより理にかなっています.JavaScriptのバンドル/トランスリンギングはその一部に過ぎません。
+0

私はこれが最善のANだと思います私はなぜそれをプロジェクトの外に置かないのだろうかと思っています。 –

+1

ありがとうございます。うん、私はプロジェクト構造になると本当にあなたのプロジェクトに依存するので、物事を構成しない方法の角度から質問に答えようとしました。たとえば、完全にAPIに基づいたReact/ReduxベースのアプリケーションであるDjangoプロジェクトがいくつかあります。このようなプロジェクトでは、フロントエンドのものを完全に独自のレポに引き出し、別々にホストすることが好きです。 Djangoのテンプレートシステムを使用するプロジェクトでは、通常、Djangoプロジェクト自体でテンプレートを使用する方が理にかなっています。 – joslarson

+0

なぜそれは意味がないのですか? DjangoテンプレートはReactプロジェクトを包むことができ、場合によっては(管理ページのような)npmパッケージにアクセスすることもできます – AlxVallejo

1

通常、node_modulesはDjangoアプリケーションの外にある必要があります。

- AppName 
---- appname (This is the Django Project) 
---- appname-env (Python virtualenv) 
---- bower_components 
---- bower.json 
---- gulpfile.js 
---- node_modules 
---- package.json 
---- requirements.txt 

その後、私は私のアプリstatic/libディレクトリにノードモジュールまたは亭コンポーネントのいずれかのコンポーネントをコピーするがぶ飲みを使用します。私は、Djangoのアプリケーションに使用一般的な形式は、次のようです。

+0

なぜそれがアプリケーションの外にあるべきだと思いますか?私はそれが一般的なものだとは思わない。それだけでなく、django –

+1

でnode.jsに近づくことは良いことだと思います。主な理由は、クライアントに提供されるファイルだけがプロジェクトの静的フォルダにあるべきだと思います。余分な不要なファイルをクライアントに提供する理由はありません。 – turbotux

6
  • は、プロジェクトのトップレベルでnpm_modulespackage.jsonを入れて:簡単にアクセス

    • 、あなたはモジュールをインストールし、プロジェクトのトップレベルトップレベルにさらさ
    • の依存性でコマンドを実行し、一般的にピップの必要条件に沿って
    • コードから分離した外部ライブラリ/モジュール
  • npm_modules.gitignore
  • 生成されたファイルのみを提供します。あなたが(代わり亭の)vendoringせずに、いくつかのNPMモジュールを提供したい場合は

サンプルプロジェクトを公開されるかを指定するdjango-npmのようなツールを使用します(オプション)STATICFILES_DIRS

  • 外のソースコードを保管してください:

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

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

  • +0

    私はあなたの答えに投票しましたが、これはセットアップに新しい人たちにあなたが私の質問に答えなかったのは "なぜ"で、 "どのように" –

    関連する問題