javascript - mac - npm version
Usar npm para instalar o actualizar paquetes necesarios como bundler para rubygems (6)
Editar: Esto solo se aplica a las versiones npm <1.0
Fue bastante difícil resolver esto, pero NPM lo hace posible .
Necesitas tres componentes
- Un subdirectorio en su repositorio (es decir,
deps/
) - Un archivo
package.json
en el directorio de arriba que enumera dependencias - Un archivo
index.js
en el directorio anterior que requiere sus dependencias
Ejemplo
Imagine que express es su única dependencia
deps / package.json
nota: Incremente la versión # cada vez que modifique las dependencias
{
"name": "myapp_dependencies",
"version": "0.0.1",
"engines": {
"node": "0.4.1"
},
"dependencies":{
"express": "2.0.0beta2"
}
}
deps / index.js
export.modules = {
express: require(''express'')
//add more
}
Ahora debería poder instalar sus dependencias usando npm. Incluso podría hacer que esta parte de su proceso de implementación
cd deps
npm install
Luego, dentro de su código de aplicación puede obtener acceso a su versión específica de express de esta manera:
var express = require(''myapp_dependencies'').express;
Amo a Bundler , es genial en la administración de la dependencia. Me encanta npm , ¡la instalación de paquetes de nodos es fácil! Tengo una aplicación nodejs y me encantaría poder especificar las dependencias de mis aplicaciones e instalarlas / actualizarlas fácilmente cada vez que implemente mi aplicación. Esta no es una biblioteca que estoy lanzando, es una aplicación web hecha y derecha.
npm bundle
comando npm bundle
, pero parece que simplemente anula el directorio donde están instalados los paquetes.
Estoy acostumbrado a usar bundler de esta manera:
# Gemfile
gem "rails", "3.0.3"
Instala rails v3.0.3 y cualquier otra gema requerida en la máquina host solo si aún no existe
> bundle install
¿Cómo puedo lograr algo similar con npm?
A partir de la versión 1.1.2 de Npm, hay un nuevo comando npm shrinkwrap
que crea un archivo npm-shrinkwrapped.json
, análogo a Gemfile.lock
. Es importante crear uno, para evitar que el software se pudra (ver el razonamiento de Bundler ). Particularmente como Nodejs tiene una comunidad tan rápida.
Mientras que la bundle install
crea un Gemfile.lock
automáticamente, npm install
no creará npm-shrinkwrapped.json
(pero lo usará cuando exista). Por lo tanto, debe recordar usar npm shrinkwrap
.
Lea una guía completa en http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
A partir de npm 1.0 (que ahora es lo que obtienes por defecto si sigues los pasos en el archivo README), "paquete" ya no es una cuestión segregada, es solo "cómo funciona".
Asi que:
- Coloque un archivo
package.json
en la raíz de su proyecto Lista tus deps en ese archivo
{ "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } }
npm install
Dado que está llamando a esto sin args, y no en modo global, simplemente instalará todos sus deps localmente.-
require("express")
y ser feliz.
Debes leer estos dos artículos del blog de Isaacs (autor npm). Creo que son realmente buenos, y creo que te dicen cómo lograr tu objetivo:
- http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
- http://foohack.com/2010/08/intro-to-npm/
Creo que el enlace # 1 (punto # 11) explica esto:
11: agrupe todas sus dependencias en el paquete mismo
Cuando use el comando npm bundle, npm pondrá todas sus dependencias en la carpeta node_modules en su paquete. Pero no se detiene allí.
Si desea depender de algo que no está en el registro, puede hacerlo. Solo haz esto:
npm bundle install http://github.com/whoever/whatever/tarball/master Esto instalará el contenido de ese tarball en el paquete, y luego puede listarlo como una dependencia, y no intentará instalarlo cuando su paquete se instala
Esto también es útil si tiene su propio tenedor de algo, y preferiría no cambiar el nombre.
De hecho, puede ejecutar casi cualquier comando npm en el paquete. Para ver lo que hay adentro, puedes hacer npm bundle ls. Para eliminar algo, haz npm bundle rm thing. Y, por supuesto, puede instalar múltiples versiones y activar la que desee.
Me parece que la solución más simple es usar un archivo package.json
con el indicador private
(agregado a npm el mes pasado) establecido en true
. De esta forma, puede ejecutar npm install
o npm bundle
para tomar las dependencias de su proyecto, pero evita que alguien publique accidentalmente su proyecto no público.
Aquí hay un ejemplo de package.json
:
{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}
La ejecución de la npm install
express
en el sistema local si aún no existe; ejecutar npm publish
da un error debido a lo "private": true
.
Usted y su equipo pueden usar la etiqueta de versión internamente para rastrear los cambios de dependencia a lo largo del tiempo: cada vez que cambie una dependencia, cambie la versión. Para ver qué versión ha instalado, use npm ls installed
.
Publique su aplicación con npm
también, y enumere sus dependencias en su archivo package.json.
Cuando alguien usa npm
para instalar su paquete, npm
se ocupará de resolver sus dependencias.
Especificación de paquetes: http://wiki.commonjs.org/wiki/Packages/1.0