10

github meteorirc プロジェクトのリードに従い、それらを /public/ に配置しました

/public/内からnpmを介してノードモジュールをインストールしたため、/public/node_modules/ディレクトリがあります。

Meteorのドキュメントによると...

Meteor は、client および public サブディレクトリの下にあるものを除いて、すべての JavaScript ファイルを収集し、それらをファイバー内の Node.js サーバー インスタンスにロードします。

ロードするコードは、server dir および server js ファイルにあり、次のようになります。

var require = __meteor_bootstrap__.require;

var path = require("path");
var fs = require('fs');
var base = path.resolve('.');
if (base == '/'){
  base = path.dirname(global.require.main.filename);   
}

var Twit;
var twitPath = 'node_modules/twit';
var publicTwitPath = path.resolve(base+'/public/'+twitPath);
var staticTwitPath = path.resolve(base+'/static/'+twitPath);
if (path.existsSync(publicTwitPath)){
  Twit = require(publicTwitPath);
}
else if (path.existsSync(staticTwitPath)){
  Twit = require(staticTwitPath);
}
else{
  console.log('WARNING Twit not loaded. Node_modules not found');
}

ドキュメントに基づくと、これは標準ではなく、この方法で行うべきではないと思います。それでも、私の開発プラットフォームと deploy meteor.com の本番環境の両方で動作します。

プロジェクトのディレクトリ構造のどこにノードモジュールをインストールして、ローカルで動作し、meteor.com または他の場所で展開する必要がありますか?

4

6 に答える 6

6
cd /usr/local/meteor/lib/ && npm install <module>
于 2012-05-21T09:53:41.610 に答える
1

Meteor は開発バンドルから取得し、シンボリック リンクを作成するか、プロジェクトの下の非表示のサブ フォルダーにあるlib/node_modulesにコピーします。server/node_modules.meteor

したがって、lib開発バンドルのディレクトリまたはフォルダーのディレクトリにservercd.meteorすると ( build. ノードモジュールを使用できるようになります。それらの読み込みに問題がある場合は、この質問を確認してください。

于 2012-05-15T16:28:01.820 に答える
1

bundleフォルダーをパスに追加する必要があります。

var staticTwitPath = path.resolve(base+'/bundle/static/'+twitPath);

これがcoffeescriptの私の作業サンプルです。 node_modulespublicフォルダーにあります。

# loading node_modules from public folder
require = __meteor_bootstrap__.require
path    = require("path")
fs      = require('fs')

cheerioPath = 'node_modules/cheerio'

base = path.resolve('.')
if base == '/'
  base = path.dirname(global.require.main.filename)

publicPath = path.resolve(base+'/public/'+cheerioPath)
staticPath = path.resolve(base+'/bundle/static/'+cheerioPath)

if path.existsSync(publicPath)
  cheerio = require(publicPath)
else if path.existsSync(staticPath)
  cheerio = require(staticPath)
else
  console.log('node_modules not found')

幸運を!

于 2012-08-28T11:47:54.323 に答える
0

すべてのnode.js依存関係を適切にインストールするスクリプトを使用しています。Meteor エンジン ブランチでの公式サポートと同様に動作します (実行時に依存関係をインストールします) が、git リポジトリや同様のグッズからのインストールもサポートします。

于 2013-03-19T00:53:13.347 に答える
0

これは、構文の強調表示パッケージを含めて、私を大いに助けてくれました! ありがとう!

ただし、これは私が使用する最後の npm パッケージではないと思うので、少しヘルパーを使用します ;)

meteorNpm = do() ->
  require = __meteor_bootstrap__.require

  path    = require 'path'
  fs      = require 'fs'

  base = path.resolve '.'
  if base is '/'
    base = path.dirname global.require.main.filename

  meteorNpm =
    # requires npm modules placed in `public/node_modules`
    require: (moduleName) ->
      modulePath = 'node_modules/' + moduleName

      publicPath = path.resolve(base + '/public/' + modulePath)
      staticPath = path.resolve(base + '/bundle/static/' + modulePath)

      if path.existsSync(publicPath)
        module = require publicPath
      else if path.existsSync(staticPath)
        module = require staticPath
      else
        module = null

      return module

次のように使用します。

highlight = meteorNpm.require "highlight.js"
于 2012-08-31T11:38:35.327 に答える