2012-05-07 18 views
19

मैं नोड निंदा मॉड्यूल के माध्यम सेमैं meteor.com पर एक मीटरी ऐप में नोड मॉड्यूल कैसे तैनात कर सकता हूं?

npm install twit 

उपलब्ध है मैं से स्थानीय स्तर पर नोड मॉड्यूल तैनात उपयोग करने वाले ऐप्लिकेशन है .meteor/स्थानीय/निर्माण/सर्वर/

इसलिए, यह दिखाई देता है .meteor/local/build/server/node_modules/twit

मैंने इसे परियोजना रूट पर स्थापित करने का प्रयास किया लेकिन परियोजना को मॉड्यूल नहीं मिला। जिसने मुझे ऊपर दिए गए समाधान के लिए प्रेरित किया जो काम करता है।

मेरा आवेदन अब स्थानीय स्तर पर ठीक चलता है। मैं जो कुछ करना चाहता हूं उसके आधार पर मैं अपने मेटीयर सर्वर साइड या क्लाइंट साइड से ट्विटर के साथ बातचीत कर सकता हूं और सब कुछ कर सकता हूं। कोई दुर्घटना नहीं

जब मैं कमांड

meteor deploy [appname] --password 

के माध्यम से meteor.com को तैनात आवेदन सफलतापूर्वक तैनात।

जब मैं किसी ब्राउज़र से (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 

क्या किसी के पास यह सुझाव हो सकता है कि यह कैसे पूरा किया जा सकता है?

+0

बस जाँच ... लेकिन अपने 'package.json' फ़ाइल में शामिल निंदा की जाती है? – rjz

+0

मुझे पता नहीं था कि मुझे अपने तैनाती में जुड़ने के लिए एक उल्का पैकेज बनाना था। मुझे यह देखने के लिए देखना होगा कि क्या यह मामला है। मैंने माना कि नोड_मोड्यूल में कुछ भी सीधे तैनाती पर धकेल दिया गया था। मैं कल स्रोत के माध्यम से खोदने जा रहा हूं यह देखने के लिए कि मैं क्या पा सकता हूं! जब तक कोई और जवाब पोस्ट न करे! –

+0

ईमानदारी से, मुझे यकीन नहीं है कि ... दूसरों को क्या कहना है सुनने के लिए तत्पर हैं। – rjz

उत्तर

8

आखिर में, मैंने इस तरह लिखा था। यह स्थानीय और उल्का सेवर दोनों में काम करता है। THX इयान: डी

अंदर NPM मॉड्यूल स्थापित "एप्लिकेशन/सार्वजनिक":

 
    app/public# npm install MODULE_NAME 
एप्लिकेशन/सर्वर/server.js अंदर

:

Meteor.startup(function() { 
    var require = __meteor_bootstrap__.require; 
    var path = require('path'); 
    var base = path.resolve('.'); 
    var isBundle = path.existsSync(base + '/bundle'); 
    var modulePath = base + (isBundle ? '/bundle/static' : '/public') + '/node_modules'; 

    var MODULE_NAME = require(modulePath + '/MODULE_NAME'); 
}); 
+0

स्पेक्ट्रम, क्या आप किसी भी प्रकार का उदाहरण प्रदान करने में सक्षम हैं? मैं इसे काम नहीं कर सकता। हर बार जब मैं एप फ़ोल्डर में परिवर्तन करता हूं तो उल्का फिर से शुरू होने पर इसे ओवरराइट किया जाता है। – Martin

+0

ठीक है, मुझे यह काम मिल गया। इस लाइन को जोड़ना था: 'var fs = requ ('fs'); 'और संशोधित करें: ' var isundle = path.existsSync (base +'/bundle ');' 'var isBundle = fs.existsSync (बेस + '/ बंडल'); ' – Martin

+3

नोट: चूंकि उल्का 0.6.0,' __meteor_bootstrap __। आवश्यकता' को [Npm.require()] (http://stackoverflow.com/a/15351543/1269037) द्वारा अप्रचलित कर दिया गया है –

7

उल्का आईर्क पर जोनाथनकिन्स्टन से मिले उत्तर। meteoric project

प्रोजेक्ट सार्वजनिक निर्देशिका में नोड मॉड्यूल रखें।

यह सुनिश्चित करने के लिए इस तरह का कोड उपयोग करें।

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'); 
} 

उल्का तैनाती के बाद लगता है काम करना चाहिए, मुझे इस काम करने के लिए प्राप्त करने के लिए सर्वर dirs

+1

आपने कोड की रेखा छोड़ी है जो आपको उल्का पर 'आवश्यकता' करने की अनुमति देती है: 'var requ = __meteor_bootstrap __। आवश्यकता;'। यह मुझे थोड़ी देर के लिए फिसल गया, और मुझे पता है कि बहुत से लोग यहां आईआरसी से इशारा करते हैं। – Lsdafjklsd

+0

टैंक u @Lsdafjklsd मैंने पोस्ट संपादित किया और इसे जोड़ा –

+0

path.existsSync() अब fs.existsSync() – Pent

0

में मेरी नोड मॉड्यूल डाल आप

base = base + "/bundle" 

के लिए देहली।

14

उल्का 6.0 के रूप में, अब हम की जरूरत है इसके बजाय npm.require() का उपयोग करें। इसके अतिरिक्त, हमें मॉड्यूल को वैश्विक चर के रूप में घोषित करने की आवश्यकता है, क्योंकि उल्का में अब फ़ाइल-स्तरीय दायरा है।

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 
+0

क्या आप स्पष्ट कर सकते हैं कि एक उल्का परियोजना के भीतर Npm.require() कथन कहां रखा जाए? – supertrue

+0

तो जब मीटियर में एनपीएम पैकेज का उपयोग करते हैं, तो आपको बस Meteor.require का उपयोग करने के बजाय ऐसा करना होगा? यदि एनपीएम मॉड्यूल सार्वजनिक/node_modules फ़ोल्डर में है, तो क्लाइंट और सर्वर दोनों पर उपलब्ध एनपीएम मॉड्यूल है? क्या एनपीएम मॉड्यूल का उपयोग करने की यह विधि सड़क के नीचे समस्याओं का कारण बनती है? मैं बस सर्वर पर उपयोग करने के लिए मेरे प्रोजेक्ट में एनपीएम मॉड्यूल को एकीकृत करने का सबसे अच्छा तरीका क्या है इस बारे में उलझन में हूं। – nearpoint

+0

@supertrue: मेरी टिप्पणी थोड़ी देर हो चुकी है, लेकिन यह स्पेक्ट्रम द्वारा जवाब के उत्तर का एक प्रकार है (वर्तमान में स्वीकृत उत्तर)। तो यह ऐप/सर्वर/server.js में हो सकता है। –

4

बस app/public कदम अंदर "स्थापित NPM मॉड्यूल पता लगाना एक आधा घंटे बिताए और सोचा था कि मैं अगले व्यक्ति कुछ समय बचाने के चाहते हैं।यदि आपके ऐप की होम निर्देशिका से:

cd public 
mkdir node_modules 
npm install foo 

डिफ़ॉल्ट रूप से, npm install foo इंस्टॉल "स्थानीय स्तर पर," लेकिन वहाँ अपने वर्तमान निर्देशिका में कोई node_modules फ़ोल्डर हो तो यह निर्देशिका वृक्ष की तलाश ऊपर ले जाता है। मैं स्थानीय परियोजना के बजाय $HOME/node_modules/foo में स्थापित पैकेज के साथ समाप्त हो रहा था। localhost के लिए ठीक है, लेकिन तैनाती के लिए इतना नहीं है।

(मेरी जड़ समस्या को हल करने के लिए npm install locally के लिए धन्यवाद।)

+3

अनुवर्ती: कुछ समय बाद मुझे इस प्रकार की चीज़ करने के लिए उल्का पैकेज 'एनपीएम' मिला, और यह एक आकर्षण की तरह काम करता है। यदि आप यहां समाप्त हुए हैं, तो आप उस पर [मेटीर हैक्स] (http://meteorhacks.com/complete-npm-integration-for-meteor.html) लेख देखना चाहेंगे। –

2

इस कोड उल्का 0.8.x के साथ मेरे लिए काम किया है और मेरे ऐप्लिकेशन के ./public में स्थापित किया जा रहा node_modules:

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' : '/../client/app') + '/node_modules/' 

var twit = Npm.require(modulePath+'rssparser') 

यह हो सकता है एनपीएम के माध्यम से आसान अपडेट/इंस्टॉल के लिए ./public के भीतर packages.json फ़ाइल बनाने के लिए भी एक अच्छा विचार होना चाहिए।

लंबे समय तक रहने वाले उल्का!

+0

मेरे स्थानीय पर चलते समय मैं अपने ऐप के रूट फ़ोल्डर में बस npm इंस्टॉल कर सकता हूं और फिर Meteor.require ('package') का उपयोग कर सकता हूं लेकिन Meteor.com परीक्षण सर्वर पर अपलोड करते समय मुझे इसे इस तरह करना था। क्या यह Meteor.require() का उपयोग करने जैसा ही है? क्या आप किसी भी डाउनसाइड्स में भाग गए हैं? – nearpoint

1

परिवर्तित:

var modulePath = base + (isBundle ? '/bundle/static' : '/../client/app') + '/node_modules/' 

रहे हैं:

var modulePath = base + (isBundle ? '/bundle/static' : '/../web.browser/app') + '/node_modules/' 
+1

इंसान! जब आपको इसकी ज़रूरत होती है तो आप सही समय पर हिट करते हैं –

संबंधित मुद्दे