tutorial react learn examples apps meteor

react - meteor tutorial



¿Cómo puedo implementar módulos de nodo en una aplicación Meteor en meteor.com? (7)

Respuesta encontrada de JonathanKingston en meteor irc. Referido al proyecto meteórico

Coloque módulos de nodo en el directorio público de proyectos.

Use un código como este para asegurarse de que se carga.

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

La implementación del meteorito debería funcionar después de eso, escúchame por poner mis módulos de nodos en los directorios del servidor

Tengo una aplicación que usa el módulo twit de nodo que está disponible a través de

npm install twit

Implementé el módulo de nodo localmente desde .meteor / local / build / server /

Por lo tanto, es visible en .meteor / local / build / server / node_modules / twit

Intenté instalarlo en la raíz del proyecto, pero el proyecto no encontró el módulo. Lo que me llevó a la solución anterior que funciona.

Mi aplicación ahora funciona bien localmente. Puedo ejecutar y hacer todo, y puedo interactuar con Twitter desde el lado del servidor de Meteor o desde el lado del cliente, dependiendo de lo que quiero hacer. Sin choques

Cuando despliegue a meteor.com a través del comando

meteor deploy [appname] --password

La aplicación se implementa con éxito.

Cuando intento acceder a la (aplicación en anonistream.meteor.com) [anonistream.meteor.com] desde un navegador, falla y los registros contienen este error.

[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

¿Alguien tiene alguna sugerencia sobre cómo se puede lograr esto?


base = base + "/bundle"

para hacer que esto funcione


finalmente, escribí así. funciona tanto en local como en meteor. thx Ian: D

instalar el módulo npm dentro de "aplicación / público":

app/public# npm install MODULE_NAME

dentro de la aplicación / servidor / servidor.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''); });


A partir de Meteor 6.0, ahora necesitamos usar Npm.require () en su lugar. Además, debemos declarar el módulo como variables globales, ya que Meteor ahora tiene alcance de nivel de archivo.

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


Este código funcionó para mí con meteor 0.8.x y node_modules siendo instalados en ./public de mi aplicación:

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

También puede ser una buena idea crear el archivo packages.json dentro de ./public para facilitar las actualizaciones / instalaciones a través de npm.

Larga vida a Meteor!


Cambiado:

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

a:

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


Acabo de pasar media hora descifrando el "módulo de instalar npm dentro de la app/public paso app/public y pensé que podría salvar a la siguiente persona en algún momento. Desde el directorio principal de la aplicación:

cd public mkdir node_modules npm install foo

De forma predeterminada, npm install foo instala "localmente", pero si no hay ninguna carpeta node_modules en su directorio actual, entonces se mueve hacia el árbol de directorios buscando una. Estaba terminando con el paquete de instalación en $HOME/node_modules/foo lugar del proyecto local. localhost bien para el localhost , pero no tanto para el despliegue.

(Gracias a npm instalo localmente para resolver mi problema de raíz).