9

django コンプレッサーを使用していくつかのクライアント側コンポーネントの後処理を行うときに、ハンドルバー テンプレートをプリコンパイルするための単純な npm モジュールを作成しましたが、npm モジュールをいくつかの js ファイルと共に出荷する必要があることがわかりました。

現在、npmモジュール自体でこれらの依存関係へのパスを「ハードコード」しているため、グローバルフラグを使用してこれをインストールする人はいないと思います

私のnpmモジュールのレイアウト例

/
* /bin
* /lib/main.js
* /vendor/ember.js

main.js内でember.jsファイルを使用したい...現在、私のハードコーディングされたアプローチは次のようになっています

var emberjs = fs.readFileSync('node_modules/django-ember-precompile/vendor/ember.js', 'utf8');

繰り返しますが、これはローカルにインストールすると想定しているためのみ機能しますが、node.jsにはローカルに埋め込まれたファイルを取得するためのより正当な方法があると思います

これをより「グローバル」フレンドリーにする方法を知っている人はいますか?

4

2 に答える 2

4

できることは、現在のファイルのディレクトリを取得し、それに対するファイル パスを作成することです。

var path = require('path')
, fs = require('fs');

var vendor = path.join(path.dirname(fs.realpathSync(__filename)), '../vendor');
var emberjs = fs.readFileSync(vendor + '/ember.js', 'utf8');

それが役立つことを願っています!

于 2013-03-02T04:46:45.027 に答える
3

Node.js の大きな強みの 1 つは、起動と実行がいかに迅速にできるかです。このアプローチの欠点は、構築された設計パターンに合わせなければならないことです。

これは、あなたのアプローチが Nodes アプローチと大きく異なる例です。Node は、テンプレートを含む、モジュール内のすべてがモジュールのエクスポートから公開されることを期待しています。

をモジュールに移動しreadFileSyncdjango-ember-precompileモジュール エクスポートを介して戻り値を公開しますlib/main.js

例:

package.json
    { 
    "name": "django-ember-precompile",
    "main": "lib/main.js"
    }
lib/main.js
    module.exports.ember = readFileSync('vendor/ember.js')
vendor/ember.js

テンプレートは次の方法で取得します

var template = require('django-ember-precompile').ember

この例は改良することができますが、核となる考え方は同じです。

于 2013-01-19T19:53:37.217 に答える