2016-11-02 7 views
1

Meteor 1.3の推奨パッケージシステムとしてnpmを使用しているので、サーバ側パッケージとクライアント側パッケージの両方がnode_modulesディレクトリにあります。流星はこれらすべてを1つの巨大なmodules.jsファイルに束ねようとします。Meteorのクライアント側バンドルから特定のnode_moduleを除外する方法はありますか?

ファイルを完全に無視するメテオを得る唯一の方法は、ファイルまたはディレクトリ名(1,2)を変更することです。

しかし、私はファイルを完全に無視したくありません。私はサーバ側でのみ必要なモジュールもあれば、クライアント側でのみ必要なモジュールもあります。

Meteorに、クライアント側のバンドルに特定のノードモジュールのみを含める方法がありますか?おそらく、クリエイティブな名前付けやハッキング.babelrcを使用していますか?

+0

バージョン1.3以降、Meteorは適切なモジュールシステムを持っています。新しいES6構文([read here](htt ps://guide.meteor.com/structure.html#es2015-modules))。すべてが「オプトイン」になっているので、何か「アウト」する必要はありません。 –

+1

@apenduaは正しかったですが、Meteorがサーバー専用コードでインポートを見つけてクライアントにバンドルするのを防ぐために、ちょっとしたパターンが必要であることがわかりました。基本的に、MeteorはMeteor.isServer'をテストする実行時条件文を尊重しないので、 "server"フォルダ内のものを隠す必要があります。 – Noland

答えて

0

すべてをサーバーに配置するバンドルに入れる必要があります。 Webサイトにアクセスすると、サーバーはHTML、CSS、およびJSを利用可能にし、ブラウザーにロードします。ブラウザが必要とするノードモジュールだけがロードされます。

これを実行する必要はありません:)

+0

module.jsは、私がサーバー側で使用していると思うものをロードしています。たとえば、Winstonロギングは、サーバー側のロギングパッケージです。 –

+0

いいえ、すべてをバンドルに入れる必要はありません。そして、はい、これを行う必要があります。たとえば、多くのnpmモジュールを使用して、電子メールテンプレートのレンダリングや送信、支払いゲートウェイとの通信、PDFの生成などのサーバ側の作業を排他的に行うことができます。私の場合、2MBのJavaScriptがクライアントに送信される理由もなく。 – Noland

0

サーバーフォルダにそれらを非表示にして、間接的にそれらをインポートします。大規模なmodules.jsファイルにバンドルされ、クライアントに送信されるスクリプトの無駄なメガバイトを防ぐされてからnode_modulesにを特定のNPMを除外する

:条件付きrequire自体サーバーフォルダ内からimportsモジュールファイル。

ので、同じように:

/* /my-import-file.js */ 

import { Meteor } from 'meteor/meteor'; 

if (Meteor.isServer) { 
    module.exports = require('./server/server-only-file'); 
} 

そして実際にあなたの大規模な、無用オンクライアントNPMモジュールをインポートしたファイル:

/* /server/server-only-file.js */ 

// Import some modules that will NOT be sent to the client 
import mailgun from 'mailgun.js'; 
import cheerio from 'cheerio'; 
import juice from 'juice'; 

export { juice, cheerio, mailgun }; 

あなたの他のコードは、これと同様に行うことができます。

import { Meteor } from 'meteor/meteor'; 
import myImport from '/my-import-file' 

if(Meteor.isServer){ 
    myImport.doServerOnlyStuff(); 
} 
関連する問題