node.js - install meteor npm
Paquetes de NPM Meteor 2013 (5)
Actualizar esta solución describe cómo usar efectivamente el nuevo sistema Npm en Meteor.
¿Cuál es el método actual de usar paquetes de NPM en Meteor?
A partir del 22 de marzo de 2013, no hay documentación oficial al respecto.
Hay varias preguntas sobre esto, especialmente esta , sin embargo, la solución parece obsoleta: la rama del motor ya no existe, y no he podido encontrar nada en Npm.require
en Meteor.
Otra solución, publicada aquí , ordena instalarla en las carpetas .meteor/
build. Como estoy instalando en Heroku, esto no parece ser una solución válida, ya que el meteor bundle
construcción usa un meteor bundle
para agrupar el programa antes de ejecutarlo. Por lo tanto, las carpetas de compilación temporal no parecen una opción válida.
¿Qué le ha pasado a Npm en el meteoro? ¿Cuál es la última forma de usar paquetes NPM?
En una nota relacionada, estoy tratando de usar el SDK de Amazon (para s3) - ¿sería mejor simplemente empaquetarlo como un paquete de Meteorito?
Arunoda ha creado un paquete NPM Atmosphere que le permite usar cualquier módulo NPM como lo está acostumbrado. Es muy sencillo.
Primero, mrt add npm
.
También puede instalar el paquete utilizando el comando meteor-npm
de npm install -g meteor-npm
.
A continuación, cree un archivo packages.json
en su directorio de proyecto raíz, con los nombres y versiones de los paquetes:
{
"foobar": "0.3.5",
"loremipsum": "2.1.4"
}
Finalmente, utilícelos con Meteor.require
, así: var FooBar = Meteor.require(''foobar'');
He estado usando el fantástico " browserify ", que funciona como un encanto. Esta es una alternativa al uso del paquete Atmosphere NPM de Arunda , o al usar Npm.require con package.js , que podría decirse que tiene algunas ventajas:
- Mi código puede usar el antiguo "requerir" en lugar de Npm.require o Meteor.require. Obviamente, este no es un gran problema, pero si quiero usar este código fuera de Meteor, es agradable sentir que no depende de Meteor.
- No tengo que preocuparme si Meteor volverá a cambiar la forma en que piensa sobre la integración de NPM.
- Me permite usar la versión de desarrollo local de mis propios módulos npm usando el enlace npm.
Así es como funciona:
- Creé un proyecto separado para dependencias npm en una carpeta oculta .npm
- Yo uso browserify para crear un bundle.js que será cargado por meteor
- Uso el reloj ronco para asegurarme de que cada vez que instale un nuevo paquete npm, se actualice el paquete.js
Aquí está mi estructura de directorio:
my_meteor_project/
lib/
bundle.js
.npm/
node_modules
README.md
Gruntfile.js
entrypoint.js
package.json
Aquí hay un ejemplo de entrypoint.js (desafortunadamente tengo que usar globales para que assert, url y _ estén disponibles en el código Meteor)
assert = require(''assert'');
url = require("url");
_ = require(''underscore'');
Aquí está el gruñido:
module.exports = function(grunt) {
grunt.initConfig({
watch: {
build: {
files: [''./entrypoint.js'', ''./package.json''],
tasks: [''browserify2''],
options: {
}
}
},
browserify2: {
compile: {
entry: ''./entrypoint.js'',
compile: ''../lib/bundle.js''
}
},
});
grunt.loadNpmTasks(''grunt-browserify2'');
grunt.loadNpmTasks(''grunt-contrib-watch'');
grunt.registerTask(''build'', [''browserify2'']);
};
Luego uso el reloj ronco para ver los cambios en entry.js o nuevas instalaciones de NPM
$ cd .npm
$ grunt watch:build &
[2] 44617
$ Running "watch:build" (watch) task
Waiting...
Y luego, si instalo un módulo npm, o modulo entrypoint.js, se actualiza bundle.js:
$ npm install url -save
npm http GET https://registry.npmjs.org/punycode
npm http GET https://registry.npmjs.org/querystring
npm http 304 https://registry.npmjs.org/punycode
npm http 304 https://registry.npmjs.org/querystring
[email protected] node_modules/url
├── [email protected]
└── [email protected]
$ OK
>> File "package.json" changed.
Running "browserify2:compile" (browserify2) task
File written to: ../lib/bundle.js
Done, without errors.
Completed in 1.256s at Thu Jul 11 2013 11:36:22 GMT-0600 (MDT) - Waiting...
La forma actual de usar los MNP en Meteor
- Reemplace las x de abajo con el nombre de NPM
- Coloque el siguiente esquema de archivos en / meteor-project-root / packages / x /
- meteoro agregar x
- Para usarlo simplemente llame a X en su código (X.function ())
x.js --------
X = Npm.require(''x'');
package.js --------
Package.describe({
summary: "Meteor smart package for x node.js package"
});
Npm.depends({
"x": "0.1.1"
});
Package.on_use(function (api) {
api.add_files("x.js", ["client", "server"]);
});
Nota: algunos paquetes solo funcionarán en el cliente o servidor; si tiene problemas, intente incluir solo el lado en el que lo va a usar.
Puedes usar https://atmospherejs.com/meteorhacks/npm
meteor add meteorhacks:npm
Y luego puede configurar su archivo package.json:
{
"redis": "0.8.2",
"github": "0.1.8"
}
Y usa estos paquetes:
var GithubApi = Meteor.npmRequire(''github'');
como está usando un meteorito, cuando instala un módulo de nodo en .meteor/local/build/server/
que realmente instala en
~/.meteorite/meteors/meteor/meteor/f07715dc70de16a7aab84e56ab0c6cbd9c1f9dc6/dev_bundle/lib/node_modules
Cuando utiliza el mrt bundle
para crear su paquete de implementación, los paquetes adicionales también se incluyen.
No lo probé en Heroku, pero verifiqué que el módulo de nodo se empaqueta cuando usa el paquete mrt.