LoginSignup
16
16

More than 5 years have passed since last update.

isomorphicなJavaScriptプロジェクトのパッケージ管理

Posted at

Node.jsでフロントエンドもバックエンドもJSのプロジェクトをはじめる際に、
それぞれのパッケージ管理をどのようにするか悩んだ記録。

要件としては、

  • 1.フロントエンドもrequireでmoduleの探索をしたい
  • 2.フロントエンドとバックエンドでパッケージ管理を分けたい

1を満たすためにcomponent.jsかbrowserifyか悩んだ。
browserifyは作りが怖かったが、component.jsはもっと怖かった。

browserifyを単純に使うとnode_modulesを共有してしまうので、
2が満たせない。debowerifyというpluginがあるようなので、
フロントエンドはbower_components/にという方針でやってみた。

// バックエンドの依存管理
package.json
// バックエンドのパッケージ置き場
node_module/* 
// バックエンドのアプリケーションコード
lib/*.js

// フロントエンドの依存管理
bower.json
// フロントエンドのパッケージ置き場
bower_component/*
// フロントエンドのアプリケーションコード
frontend/js/*.js

gulpfile.js  // browserifyとdebowerify
// 結合後のjsやcss
public/


ところがこれだと、node_moduleもbower_componentも同じモジュールがあったときに、
node_moduleのほうをbrowserifyが優先してしまい、コードを見てもオプションがなさそうだった。

また、gulpで必要なモジュールをpackage.jsonに書き続けないと行けないのもつらい。

結局、次のようにフロントエンドとバックエンドで異なるリポジトリという意識に近い構成にした。

// バックエンドの依存管理
package.json
// バックエンドのパッケージ置き場
node_module/* 
// バックエンドのアプリケーションコード
lib/*.js

// フロントエンドのもろもろをやるところ
frontend/
    - package.json
    - bower.json
    - node_module/
    - bower_component/
    - gulpfile.js
    - public/


npm scriptsのpostinstallなどでfrontendにcdして、bower install && npm install
したりすることで環境構築すればいいかなと。

gulpは、cwdを外から差し込めないタイプのモジュールが多すぎて、どうせ、フロントエンドでしかつかわないから
そちらに置くことにした。

isomorphicなとかいいながら、共有コードについて触れていないのは、
やってみて必要になったら、考えるという形でいくつもり。

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16