19

経由で利用できるノードtwitモジュールを使用するアプリケーションがあります

npm install twit

ノードモジュールを.meteor/local / build /server/からローカルにデプロイしました

したがって、.meteor / local / build / server / node_modules/twitに表示されます。

プロジェクトルートにインストールしようとしましたが、プロジェクトでモジュールが見つかりませんでした。それは私をうまくいく上記の解決策に導きました。

私のアプリケーションはローカルで正常に動作するようになりました。私はすべてを実行して実行することができ、やりたいことに応じてMeteorサーバー側またはクライアント側からTwitterと対話できます。クラッシュはありません。

コマンドを使用してmeteor.comにデプロイすると

meteor deploy [appname] --password

アプリケーションは正常にデプロイされます。

ブラウザから(anonistream.meteor.comのアプリ)[anonistream.meteor.com]にアクセスしようとすると失敗し、ログにこのエラーが含まれます。

[Mon May 07 2012 01:59:53 GMT+0000 (UTC)] WARNING
node.js:201
   throw e; // process.nextTick error, or 'error' event on first tick
         ^
Error: Cannot find module 'twit'
at Function._resolveFilename (module.js:332:11)
at Function._load (module.js:279:25)
at Module.require (module.js:354:17)
at require (module.js:370:17)
at app/server/server.js:2:12
at /meteor/containers/84162a7c-24e8-bf26-6fd8-e4ec13b2a935/bundle/server/server.js:111:21
at Array.forEach (native)
at Function.<anonymous>
 (/meteor/containers/84162a7c-24e8-bf26-6fd8-     e4ec13b2a935/bundle/server/underscore.js:76:11)
at /meteor/containers/84162a7c-24e8-bf26-6fd8-e4ec13b2a935/bundle/server/server.js:97:7
[Mon May 07 2012 01:59:53 GMT+0000 (UTC)] INFO STATUS running -> waiting
[Mon May 07 2012 01:59:53 GMT+0000 (UTC)] ERROR Application crashed with code: 1
[Mon May 07 2012 02:29:55 GMT+0000 (UTC)] INFO HIT / 24.94.158.145
[Mon May 07 2012 02:29:59 GMT+0000 (UTC)] INFO HIT /favicon.ico 24.94.158.145
[Mon May 07 2012 02:30:46 GMT+0000 (UTC)] INFO HIT / 24.94.158.145
[Mon May 07 2012 02:30:50 GMT+0000 (UTC)] INFO HIT /favicon.ico 24.94.158.145

これがどのように達成されるかについて誰かが何か提案がありますか?

4

7 に答える 7

14

Meteor 6.0 以降、代わりに Npm.require() を使用する必要があります。さらに、Meteor にはファイル レベルのスコープがあるため、モジュールをグローバル変数として宣言する必要があります。

  var path = Npm.require('path');
  var fs = Npm.require('fs');
  var base = path.resolve('.');
  var isBundle = fs.existsSync(base + '/bundle');
  var modulePath = base + (isBundle ? '/bundle/static' : '/public') + '/node_modules';
  MODULE_NAME = Npm.require(modulePath + '/MODULE_NAME'); // NOTE, this is going to be a global variable
于 2013-06-30T23:57:26.273 に答える
7

流星ircのJonathanKingstonからの回答が見つかりました。隕石プロジェクト参照

ノード モジュールをプロジェクトのパブリック ディレクトリに配置します。

このようなコードを使用して、確実に読み込まれるようにします。

var require = __meteor_bootstrap__.require;
var path = require("path");
var fs = require('fs');
var Twit;
var twitPath = 'node_modules/twit';

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

var publicPath = path.resolve(base+'/public/'+twitPath);
var staticPath = path.resolve(base+'/static/'+twitPath);

if (path.existsSync(publicPath)){
  Twit = require(publicPath);
}
else if (path.existsSync(staticPath)){
  Twit = require(staticPath);
}
else{
  console.log('node_modules not found');
}

meteor deploy はその後 find で動作するはずです。サーバーのディレクトリにノード モジュールを配置してください。

于 2012-05-08T09:51:09.623 に答える
4

「npmモジュールをインストールする」ステップを理解するのに30分を費やしただけでapp/public、次の人の時間を節約できると思いました。アプリのホームディレクトリから:

cd public
mkdir node_modules
npm install foo

デフォルトでは、 npm install foo「ローカルに」インストールnode_modulesされますが、現在のディレクトリにフォルダーがない場合は、ディレクトリ ツリーを上に移動してフォルダーを探します。$HOME/node_modules/fooローカル プロジェクトの代わりにパッケージをインストールすることになってしまいました。localhostには問題ありませんが、展開にはあまり適していません。

(根本的な問題を解決してくれたnpm install localに感謝します。)

于 2013-10-27T11:35:50.733 に答える
0

君は

base = base + "/bundle"

これを機能させるには。

于 2012-08-14T03:32:06.663 に答える