如何在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