2017-10-12 10 views
0

Meteor 1.6ベータ版を使用してchokidar(watchdog)経由で複数のモジュールをロードしようとしていますが、作業。Meteor node.js内のモジュールを動的に読み込みます

私が集まる静的な文字列以外のものになりません設計によって必要とするものから、

、すなわち

require("test/string/here") 

ので、私がしようとした場合:

var path = "test/string/here" 
require(path) 

私はエラーを取得:モジュールを見つけることができません、たとえ文字列が同じであっても。

これについてどうすればいいのか不明ですが、流星を使用するときにインポートまたは静的な文字列を使用することを余儀なくされていますか、これにはいくつかの回避策がありますか?

watchdog(cmddir, (dir) => { 
match = "." + regex_cmd.exec(dir); 

match = dir; 

loader.emit("loadcommand", match) 


}); 

loader.on('loadcommand', (file) => { 
require(file); 
}); 
+0

私は魅力的なように働く反応負荷と動的インポートを使用しました! –

+0

これらのモジュールは通常のnpmモジュールですか、独自のスクリプトですか(つまり、/ importsにはありません)?後者の場合は、絶対パスを指定する必要があります。そうでないと動作しません。 – Mikkel

+0

または少なくとも十分な相対パス。 '/ test/string/here'は動作しますか? –

答えて

0

あなたの説明には、本質的に何かがあります。

chokidarは、実際のファイルとフォルダを見るために使用されます。

しかし、Meteorはコードをコンパイルしてバンドルし、ビルド後のプロジェクトフォルダはプロジェクト構造とはまったく異なります。

Meteorは動的インポートをサポートするようになりましたが、このメカニズムはMeteorの内部であり、実際のプロジェクトファイルに依存するのではなく、Meteorで構築されたものです。

あなたが動的に生成されたモジュールパスを含むノードのように動的にrequireファイルにしたい場合は、自動的に内蔵されたインポート・メカニズム流星によって置き換えられimportrequire文を、避けるべきです。代わりに、アプリケーションの作成フォルダがプロジェクトフォルダと異なることを考慮して、独自の読み込み機能を作成する必要があります。

たとえば、サーバーが静的な場所にあるファイルやフォルダを見ている場合、アプリケーションが実行されている場所とは別の場所でサーバーが見ている場合などです。

最後に、これは一種のXY問題だと感じます。あなたは最初にあなたの目的を記述しておらず、上記の問題はMeteorの仕組みに合わないような奇妙な解決方法を解決しようとしています。したがって暗黙の目的のための最も適切な解決策ではないかもしれません。

+0

基本的に私が達成しようとしているのは、リアルタイムで流星に別のコマンド(イベントを介してトリガするプログラム用)をロードすることです。これはchokidarを使って特定のフォルダとサブフォルダを見るのです。 –

+0

「リアルタイム」では、アプリケーションのビルド時に利用できないということを意味する場合、上記のとおり、Meteorの範囲外であり、独自のローディング機能を構成する必要があります。 – ghybs

+0

申し訳ありませんが、独自の読み込み機能を実装する際に役立つリンクや書籍があるかどうかは疑問です。 –

0

@Sashkoは、Meteorの動的インポートを説明するのに大変役立ちますheredocs

はダイナミック輸入だけではなく、ビルド時に静的にインポートするの約束を返す機能でもあります。例:

import('./component').then((MyComponent) => { 
    render(MyComponent); 
}); 

約束は、モジュールがロードされた後に実行されます。モジュールを繰り返しロードしようとすると、ロードされるのは1回だけで、後続のリクエストですぐに使用できます。

afaictインポートする文字列に変数を使用できます。

関連する問題