使用NPM安装或所需的软件包更新,就像为打捆的RubyGems

我爱捆扎机,它在依赖管理的伟大。 我喜欢故宫,安装节点程序包是很容易! 我有一个应用程序的NodeJS并愿意可以指定我的应用程序的依赖,轻松地安装/更新它们的地方我部署我的应用程序。 这不是我发布一个库,它一个完全成熟的web应用程序。

我知道的npm bundle的命令,但似乎只是简单地覆盖而软件包的安装目录。

我已经习惯了以这种方式使用捆扎机:

# Gemfile gem "rails", "3.0.3"

安装导轨v3.0.3和主机上的任何其他所需的宝石,只有当它不存在

> bundle install

我怎样才能实现与故宫相似的地方?

--------------解决方案-------------

由于NPM 1.0(这是现在你在默认情况下会得到什么,如果你遵循README文件的步骤)的“捆绑”不再是一个隔离的东西 - 它只是“它是如何工作。”

所以:

  1. 将一个文件的package.json在项目的根
  2. 列出你DEPS在该文件

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }

  3. npm install既然你用无参数调用这个,而不是在全局模式下,它只会在本地安装所有DEPS。
  4. require("express")和快乐。

编辑:这仅适用于NPM版本<1.0


这是相当困难的想出解决办法,但NPM使这成为可能

您需要三个组件

  1. 在你的仓库子目录(即deps/
  2. 一个package.json在上面的目录文件中列出了相关
  3. 一种index.js在上述目录中的文件,需要你的依赖

试想一下,快递是你唯一的依赖

DEPS /的package.json

注意:增加版本#每次修改的依赖关系

{
"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
}

现在,你应该能够安装使用NPM你的依赖。 你甚至可以让你的部署过程的这部分

cd deps
npm install

然后,您的应用程序代码中,你可以访问你的快递这样的特定版本:

var express = require('myapp_dependencies').express;

你应该阅读从艾萨克斯(作者NPM)博客这两篇文章。 我觉得他们真的很不错,我相信告诉你如何实现你的目标:

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. http://foohack.com/2010/08/intro-to-npm/

我相信链接#1(点#11)解释了这一点:

11:捆绑所有的依赖关系到包本身

当您使用NPM bundle命令,将故宫把所有的依赖到node_modules文件夹中包。 但它不会停在那里。

如果你想依靠的东西,这不是在注册表中,你可以做到这一点。 只要做到这一点:

NPM捆绑安装http://github.com/whoever/whatever/tarball/master这将这个压缩包中的内容安装到捆绑,然后你就可以将其列为依赖,它不会试图安装时,它你的包被安装。

这也是方便的,如果你有自己的东西叉,而宁愿不更改名称。

事实上,你几乎可以运行在任何捆绑故宫命令。 要看看里面有什么,你可以做NPM束LS。 要删除的东西,做NPM包RM的事情。 并且,当然,你可以安装多个版本,并激活您想要的。

由于NPM 1.1.2版本,有一个新的命令npm shrinkwrap它创建了一个npm-shrinkwrapped.json文件,类似于Gemfile.lock 。 使一个,防止腐烂软件(见捆扎机的原理)是很重要的。 特别是具有的NodeJS这样一个快速移动的社区。

虽然bundle install创建Gemfile.lock自动完成, npm install不会产生npm-shrinkwrapped.json (但是当它存在将使用它)。 因此,你需要记住使用npm shrinkwrap

阅读在http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/全指南

在我看来,最简单的解决方法是使用一个package.json文件,用private标记(加入NPM上个月刚)设置为true 。 这样,你可以运行npm installnpm bundle抢你的项目的依赖,但可以防止任何人不小心发布您的非公开的项目。

下面是一个例子package.json

{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}

运行npm install将安装express在本地系统上,如果它不存在; 运行npm publish提供了一个错误,因为"private": true

您和您的团队可以使用的版本标签内部跟踪时间每次过的依赖性变动更改的依赖,凹凸的版本。 要查看您已经安装的版本,使用npm ls installed

发布您的应用npm以及,并列出其依赖于你的package.json文件。

当有人使用npm来安装你的包, npm将解决其依赖的照顾。

包装规格:http://wiki.commonjs.org/wiki/Packages/1.0

分类:JavaScript的 时间:2012-01-01 人气:0
分享到:

相关文章

  • 如何更新的Node.js和NPM到下一个版本? 2012-11-30

    我刚安装的Node.js和NPM(附加模块). 如何更新的Node.js和我使用的最后一个版本的模块? NPM能做到吗? 还是我必须删除并重新安装的Node.js和NPM获得下一个版本? 我也跟着https://github.com/joyent/node/wiki/Installation(步骤3a)和下一个NPM部分. --------------解决方案------------- 请参阅的文档update命令: npm update [<name> [<name> ...]]

  • 无人值守安装的Node.js和NPM,但没有从源代码构建 2012-11-19

    有没有从源代码构建它安装在无人值守的方式(用shell脚本)的Node.js和NPM的方法吗? 我有一个秤自动根据服务器负载的服务器阵列,但下载Node.js的来源和使用建筑使它像需要10分钟. 谢谢! 编辑:我试图复制过的二进制文件,但是导致错误的二进制已损坏. 是的,他们都是EC2实例的m1.small. --------------解决方案------------- 假设你的脚本是这样的: git clone https://github.com/joyent/node.git cd no

  • Twitter的节点未按规定建立的Node.js(NPM安装Twitter的节点) 2013-05-18

    我试图安装"推特节点"(NPM安装Twitter的节点). 版本3.2预节点JS的. 当我尝试安装我收到后续的错误. 什么我可能做错了什么想法? 似乎是一个非常简单的安装到我. 我能够成功安装插座-io的太... m ERR! Error: twitter-node@0.0.2 preinstall: `./build.sh` npm ERR! `sh` failed with 1 npm ERR! at ChildProcess.<anonymous> (/usr/loc

  • 什么是飞镖语言上的JavaScript的好处(Node.js的) 2012-01-08

    我没有看到他们正试图解决的问题方面达特点. 我看,这是由于JavaScript的短缺憾,但是这些短期缺憾没有得到建立. 有人可以解释学飞镖,而不是我的学习Node.js的好处? --------------解决方案------------- 技术概述似乎总结的区别相当不错: 类别:JavaScript的同时, 是面向对象的 ,它不提供类(至少在它的最新版本),它实际上是一个基于原型的语言,而不是基于类的语言. 虽然这是不是天生坏,它是从最重要的面向对象的语言,这使得它更难学习对大多数人不同. (

  • JavaScript的子类的Node.js快递方法来添加常用功能? 2012-01-24

    对不起,仍然相当新的JavaScript这里,所以希望这个问题不是太令人尴尬的容易,但是: 我发现我写的大意如下的node.js(快递)大量的代码: app.get("urlscheme1", function (res, resp) { try { auth_request(req); // throws on failure validate_url_params(req); // throws on failure common_tasks(); specific_taskABC

  • JavaScript框架上的Node.js 2012-02-17

    我不知道这些JavaScript框架 - 官方 - 工程上的Node.js: jQuery的 原型 MooTools的 道场 EXTJS --------------解决方案------------- 看到这个帖子的jQuery的兼容性. 此链接对MooTools的使用Node.js的一些信息 对Dojo和Node.js的一些信息的另一个链接 节点模块列表列出道场的补丁版本的"CommonJS的可以与节点使用兼容模块"之一. 你也可以去节点toolbelt发现问题排序(AUTH,DB,

  • 测试客户端的JavaScript代码茉莉花和node.js的 2012-04-17

    鉴于:客户端JavaScript代码(在浏览器中运行,使用jQuery等). 目前,该代码与测试Rhino和envjs . 我们想切换到Node.js的 然而,一些研究后,找不到任何envjs样的补充,模拟浏览器. 在运行node.js "原样",甚至连基本的功能,如alert()或window失踪. 有没有标准捆绑,类似Rhino & envjs为node.js吗? --------------解决方案------------- 你可以使用zombie.js,其中有你需要的一

  • 访问中使用的Node.js后NPM从客户underscore.js 2013-04-18

    在Node.js的,我装的是underscore.js模块. 试图把它列入这样的布局: script(src='/underscore/underscore-min.js') script(src='/socket.io/socket.io.js') 但是socket.io是被发现的唯一的一个. 在node_modules/socket.io ,没有socket.io.js文件,但在node_modules/underscore/ ,有一个udnerscore-min.js. 正好我怎么拉下so

  • 的Node.js和NPM皮克Postgres的错误 2013-05-27

    我试图获取节点与NPM工作Postgesql客户端. 使用节点v0.6.14和接收以下错误: pg@0.5.4安装/用户/亚光/网站/ node_test / node_modules / PG 节点WAF配置构建|| 真正 检查程序G ++或C ++:在/ usr / bin中/ G ++ ... "配置"成功完成(0.082s) WAF:进入目录"/用户/亚光/网站/ node_test / node_modules / PG /建设" [1/2] CXX:SR

  • 无法运行的Node.js和NPM例如聊天 2013-09-28

    我试图运行像http://www.giantflyingsaucer.com/blog/?p=2535我已经安装了新公共管理不同的聊天的例子,也是正常节点和它的工作的罚款. 但是,当我曾经试图运行示例代码我收到此错误,这我不能够解决这个问题. node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Cannot find module 'express' at Function

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.498 (s). 10 q(s)