如何在Nodejs中进行依赖关系的递归安装?

我有以下项目结构。

parentDir
---> Child1
---- [Child1] package.json
---> Childe2
---- [Child2] package.json
     -----> SubChild3
     ------ [subchild3] package.json
---- [parent] package.json

我有独立的模块,它有自己的依赖关系,我想一次安装所有的软件包,我不想进入特定的目录。 这可能吗 ? 我尝试了使用shell脚本来保存目录路径,但代码库发生了巨大变化,因此无法总是更新shell脚本目录条目。 如何使用像Grunt等任何跑步者在Nodejs中实现这一点?


假设你为每个模块创建了包,你只需要在根中有一个package.json ,并命名所有的依赖关系。 这些包中的每一个都有自己的package.json和依赖关系。 然后从你的项目根目录( package.json所在的地方)运行

npm install

npm将负责安装依赖关系的依赖关系。 例:

// parent package.json
{
  "name": "yourApp",
  "description": "An app for doing stuff",
  "version": "1.0.0",
  "scripts": {
    "init": "npm install",
    "install": "bower install",
    "start": "node src/server/app.js",
    "test": "gulp test"
  },
  "dependencies": {
    "angular-ui-router": "^0.2.15",
    "body-parser": "^1.8.2",
    "express": "^4.9.3",
    "express-content-length-validator": "^1.0.0"
  }
}

// child dependency (this example is part of angular-ui-router's package.json)
{
  "name": "angular-ui-router",
  "description": "State-based routing for AngularJS",
  "version": "0.2.15",
  "homepage": "http://angular-ui.github.com/",
...
"dependencies": {},
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-uglify": "~0.4.0",
    "grunt-contrib-jshint": "~0.8.0",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-contrib-connect": "~0.7.1",
    "grunt-contrib-clean": "~0.5.0",
...
}

即使上面的依赖关系也会有它们自己的包文件,当你在根目录下运行npm install时, npm运行它。 它将结果打印到命令行(如果从那里运行它)。 如果我尝试在命令行上看到一个简单的(全局)安装grunt

grunt@0.4.5 node_modules/grunt
├── which@1.0.9
├── dateformat@1.0.2-1.2.3
├── eventemitter2@0.4.14
├── getobject@0.1.0
├── rimraf@2.2.8
├── colors@0.6.2
├── async@0.1.22
├── hooker@0.2.3
├── grunt-legacy-util@0.2.0
├── exit@0.1.2
├── nopt@1.0.10 (abbrev@1.0.7)
├── minimatch@0.2.14 (sigmund@1.0.1, lru-cache@2.7.0)
├── glob@3.1.21 (inherits@1.0.2, graceful-fs@1.2.3)
├── lodash@0.9.2
├── coffee-script@1.3.3
├── underscore.string@2.2.1
├── iconv-lite@0.2.11
├── findup-sync@0.1.3 (glob@3.2.11, lodash@2.4.2)
├── grunt-legacy-log@0.1.2 (grunt-legacy-log-utils@0.1.1, underscore.string@2.3.3, lodash@2.4.2)
└── js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.16) 

子依赖关系是垂直列出的,而子项的子项是水平列出的,例如,子依赖关系js-yaml被列为:

js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.16)

以下是~^之间区别的可接受答案

用最简单的术语来说,波形符与最新的次要版本(中间数字)匹配。 〜1.2.3将匹配所有1.2.x版本,但会错过1.3.0。

另一方面,插入符号更轻松。 它会将您更新到最新的主要版本(第一个数字)。 ^ 1.2.3将匹配包括1.3.0在内的任何1.xx版本,但会在2.0.0版本中推迟。

链接地址: http://www.djcxy.com/p/27657.html

上一篇: How to do recursive installation of dependencies in Nodejs?

下一篇: Github potential security vulnerability error for hoek node module