npm安装包时会npm 自动安装依赖包该包依赖的其他包么

您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&92672人阅读
NodeJS(4)
npm&install&&name&***nodejs的依赖包
例如npm install express 就会默认***express的最新版本,也可以通过在后面加版本号的方式***指定版本,如npm install express@3.0.6
npm&install&&name&&-g &将包***到全局环境中
但是代码中,直接通过require()的方式是没有办法调用全局***的包的。全局的***是供命令行使用的,就好像全局***了vmarket后,就可以在命令行中直接运行vm命令
npm&install&&name&&--save &***的同时,将信息写入package.json中
项目路径中如果有package.json文件时,直接使用npm
install方法就可以根据dependencies配置***所有的依赖包
这样代码提交到github时,就不用提交node_modules这个文件夹了。
&会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
npm&remove&&name&移除
npm&update&&name&更新
npm&ls&列出当前***的了所有包
查看当前包的***路径
npm&root&-g &查看全局的包的***路径
npm help &帮助,如果要单独查看install命令的帮助,可以使用的npm
help install
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:252637次
积分:1216
积分:1216
排名:千里之外
原创:14篇
评论:15条
(3)(1)(1)(1)(1)(2)(2)(1)(1)(1)(2)(2)(1)现在遇到一个问题,我发布了一个npm包(A包),该包依赖另外一个包(B包),但当我在项目中***A包时,不会***B包,该如何解决?
如果你的包依赖于另一个包,那么这种依赖关系必须在包根目录的 package.json 文件中描述清楚,例如:{
"name": "xxx",
"dependencies": {
"express": "^4.14.0",
一般来说不需要手动去修改维护(当然也有需要的情形),通过下面的命令***的其他包都会被写入到当前包的依赖关系里:npm install xxx --save
其中的 --save 参数是起作用的关键。我猜测你***外部包的时候没带 --save 参数。更详细的用法可以通过下面的命令获得:npm help
但我建议查阅
上的官方文档说明,因为更容易阅读:并且其中一些主题在上面的命令输出中不涉及,例如常见的 npm 全局***需要管理员权限的修正办法:另外要注意,npm 包管理系统描述包间依赖时,是有区分的,包括普通的依赖(dependencies),以及开发阶段依赖(devDependencies),这对于很多项目都很重要,如果你作 TDD(测试驱动开发)的话,你不应当把使用到的测试框架作为普通的依赖写进去,而应当列在开发阶段依赖里,否则每个使用你包的人都会额外***一大堆东西,而他们并不需要这些。这是新手容易疏忽的一个地方。忘了说了,依赖时的版本描述是有标准的,叫语义化版本名(Semantic Versioning),看起来高大上,其实非常简单,读了不会亏:另外额外提示一下,如果你在本机开发多个包,而这些包相互有依赖。那么可能会觉得反复相互***可能很繁琐。这时候下面的命令可以解放你:// 假设依赖关系是 A -& B
// 请进入 B 的根目录执行下述命令
// 然后进入 A 的根目录执行下述命令
npm link B
具体的细节参见:
已有帐号?
无法登录?
社交帐号登录Manager(NPM)
在 Nodejs开发,我们首先能使用 Nodejs 的基础语言特性即核心函数,但是原生的函数不能满足我们的需求,或者我们不想重复造轮子怎么办?这时我们就需要使用别人写好第三方模块(或者称之为包,package)来满足我们自己的需求,而 Nodejs
了一个工具 ---- NPM,用来下载、***和管理第三方模块的原因。
NPM是三位一体的系统----第三方包库、管理中***的包的机制以及定义包依赖关系的标准。其提供了一种公共注册服务,它包含了员在 NPM 中发布的所有包,同时还提供了一个命令行工具用来下载、***和管理这些包,而在庞大的第三方库中总能找到满足你特殊需求的功能包。
应用 NPM ***、更新和卸载包
NPM 集中维护了一个公共包库,你可以在其官方
搜索你想要的包。我们自己开发的开源包也可以发布到这个官方上,具体可以查看
使用全局模式和本地模式
在使用 NPM ***包前,我们需要了解 NPM 的两种主要的工作模式:全局模式和本地模式,这两种模式会引起包的目标目录发生变化,其对 Nodejs 载入模块的方式有着重要影响。
是 NPM 中默认的工作模式,该模式下 NPM 只工作在本地层次上,不会引起系统范围的变化。如果想再***包时不会对那些已经在本地***的造成影响,则本地模式十分合适。
适合***那些全局可用的包,比如提供命令行使用工具的包或者不会被应用程序直接调用的包。
如果在*** Nodejs 时使用的是默认目录(
),则在全局模式下 NPM 会将包***到
/usr/local/lib/node_modules/
目录下。如果在命令行模式(
等)下输入以下命令,NPM 就会在查找下载最新的包(例如 bower),并将其***到
/usr/local/lib/node_modules/bower
目录下,如下例:
npm install -g(lobal) bower
这里需要注意
:如果当前的 shell 用户没有足够权限,那么必须以 root 用户登录或者在上面的命令前加上
sudo npm install -g bower
***完成后我们就可用在 shell 下使用这个命令所提供的功能,如上面我们输入:
,会输出如下:
bower && [&args&] [&options&]
Manage bower cache
Display help information about Bower
Opens a package homepage into your favorite browser
Info of a particular package
Interactively create a bower.json file
Install a package locally
Symlink a package folder
List local packages - and possible s
Look up a package URL by name
Removes local extraneous packages
Register a package
Search for a package by name
Update a local package
Remove a local package
Bump a package version
-f, --force
Makes various commands more forceful
-j, --json
Output consumable JSON
-l, --log-level
What level of logs to report
-o, --offline
Do not hit the
-q, --quiet
Only output important information
-s, --silent
Do not output anything, besides errors
-V, --verbose
Makes output more verbose
--allow-root
Allows running commands as root
Output Bower version
See 'bower help &command&' for more information on a specific command.
这表明我们已经成功的以全局模式***好了
本地模式是 NPM 的默认工作模式,也是推荐的模块依赖关系,在该模式下 NPM 就爱那个所有模块都***到当前工作目录下,这样就不会影响任何全局设置,可用选择这种机制逐个设置应用程序依赖的包以及他们的版本而不会污染全局模块。这意味着可用让不同的应用程序依赖同一个包得不同版本而不会导致冲突。
在本地模式下,NPM 在当前工作目录下的
node_modules
子目录中存放所要用到的包。例如当前的工作目录为
/path/myApp/
,则在当前工作目录下使用 NPM***包就会将包存放在
/path/myApp/node_modules/
解析包依赖关系
在使用包时,Nodejs 有一个查找包的过程,Nodejs 会首先在当前工作目录中的
node_modules
目录中查找目标模块,如果没有找到就查找当前目录的上一级目录中的
node_modules
,依次循环,最后在全局模式下的包***目录(
/usr/local/lib/node_modules/
)中查找,如果没有找到,则提示报错。
从Nodejs 的包查找过程中我们看到,Nodejs 在解析包依赖关系时,以本地模式***的包优先高于以全局模式***的包。
NPM 的功能用法
NPM提供了很多功能,我们可以输入命令
来查看其具体功能:
Usage: npm &command&
where &command& is one of:
access, add-user, adduser, apihelp, author, bin, bugs, c,
cache, completion, config, ddp, dedupe, deprecate, dist-tag,
dist-tags, docs, edit, explore, faq, find, find-dupes, get,
help, help-search, home, i, info, init, install, issues, la,
link, list, ll, ln, login, ls, outdated, owner, pack,
prefix, prune, publish, r, rb, rebuild, remove, repo,
restart, rm, root, run-script, s, se, search, set, show,
shrinkwrap, star, stars, start, stop, t, tag, test, tst, un,
uninstall, unlink, unpublish, unstar, up, update, v,
verison, version, view, whoami
npm &cmd& -h
quick help on &cmd&
display full usage info
commonly asked questions
npm help &term&
search for help on &term&
npm help npm
involved overview
Specify configs in the ini-formatted file:
/Users/eric/.npmrc
or on the command line via: npm &command& --key value
Config info can be viewed via: npm help config
npm@2.5.1 /usr/local/lib/node_modules/npm
输入下面的目录就可以下载和***最新版本的包:
# npm install &package name&
(sudo) npm install bower
该命令会在当前的工作目录下的
node_modules
下下载***该包的最新版本。如果
node_modules
文件夹不存在,在该目录会创建一个,同时将该包***在该目录中。
使用以下目录可以选择***特定版本的包:
# npm install &package name&@&version&
(sudo) npm install bower@1.3.x
该命令会***
最新版本。
我们还可以下载***特点范围版本的包:
(sudo) npm install bower@"&1.3"
(sudo) npm install bower@"&= 1.2.0 &1.3.10"
使用下面命令,NPM 就会通过指定的名称查找和卸载包:
# npm uninstall &package name&
(sudo) npm uninstall bower
如果要卸载以全局模式***的包,则输入以下目录:
# npm uninstall -g &package name&
(sudo) npm uninstall -g bower
使用以下目录更新已经***的包:
# npm update &package name&
(sudo) npm update bower
该目录会获取最新版本的包,并更新对于的本地版本;如果要更新的包不存在,则会***这个包,此时等同于
npm install &package name&
更新全局模式***的包则加上
# npm update -g &package name&
(sudo) npm update -g bower
解析依赖关系
NPM 不仅会***我们指定的包,还会***这些指定包所依赖的其他包。第三方包可能也会使用其他第三方的包,以此类推,就形成了一个包依赖关系(或者包依赖树)。
举例说明,我们***的包 Package-A,其又依赖 Package-B 和 Package-C,那么在 Nodejs *** Package-A时会自动将 Package-B 和 Package-C也***,并将该两个包放在 Package-A 的
node_modules
目录下,我们可以在当前工作目录或进入到某个包目录下运行以下命令查看依赖关系:
则输出如下:
grunt@0.4.5 /Applications/xampp/xamppfiles/htdocs/project_wechat/wx-chowsangsang/node_modules/grunt
├── async@0.1.22
├── coffee-script@1.3.3
├── colors@0.6.2
├── dateformat@1.0.2-1.2.3
├── eventemitter2@0.4.14
├── exit@0.1.2
├─┬ findup-sync@0.1.3
│ ├─┬ glob@3.2.11
│ │ ├── inherits@2.0.1
│ │ └─┬ minimatch@0.3.0
├── lru-cache@2.7.0
└── sigmund@1.0.1
│ └── lodash@2.4.2
├── getobject@0.1.0
├─┬ glob@3.1.21
│ ├── graceful-fs@1.2.3
│ └── inherits@1.0.2
├─┬ grunt-legacy-log@0.1.2
│ ├── grunt-legacy-log-utils@0.1.1
│ ├── lodash@2.4.2
│ └── underscore.string@2.3.3
├── grunt-legacy-util@0.2.0
├── hooker@0.2.3
├── iconv-lite@0.2.11
├─┬ js-yaml@2.0.5
│ ├─┬ argparse@0.1.16
│ │ ├── underscore@1.7.0
│ │ └── underscore.string@2.4.0
│ └── esprima@1.0.4
├── lodash@0.9.2
├─┬ minimatch@0.2.14
│ ├── lru-cache@2.7.0
│ └── sigmund@1.0.1
├─┬ nopt@1.0.10
│ └── abbrev@1.0.7
├── rimraf@2.2.8
├── underscore.string@2.2.1
└── which@1.0.9
上面输出的是
包的依赖关系。
应用 package.json 定义依赖关系
在编写 Nodejs 应用程序时,可以在下添加一个
package.json
文件,可以使用该文件来定义应用程序的一些元数据,例如名称、作者、代码库地址,协议等,同时也可以定义应用程序依赖的外部包列表。
package.json是 JSON 格式的文件,包含一些列的数据,如果我们只是为了声明依赖关系,那么只需要一个
dependencies
属性。可以通过
命令,按照提示一步步创建一个 package.json 文件,下面是一个应用程序的 package.json 的内容:
"name": "Test",
"version": "1.0.0",
"description": "test for package.json",
"main": "index.js",
"repository": {
"type": "git",
"url": "https://github/EricThsi/test.git"
"author": "Eric Zhang",
"license": "MIT",
"dependencies": {
"connect-livereload": "^0.5.3",
"grunt": "^0.4.5",
"grunt-contrib-compass": "^1.0.1",
"grunt-contrib-imagemin": "^0.9.4",
"grunt-contrib-jshint": "^0.11.0",
"grunt-contrib-uglify": "^0.9.1",
"grunt-contrib-watch": "^0.6.1",
"grunt-sass": "^0.18.1",
"grunt-tinypng": "^0.6.1",
"load-grunt-tasks": "^3.1.0",
"node-sass": "^2.0.1",
"time-grunt": "^1.1.0"
在一个没有***模块,但是有一个定义包依赖关系的 package.json 文件的中,我们可以直接通过如下命令***所定义的依赖包:
(sudo) npm install
命令执行后,NPM 将会分析 package.json中
dependencies
中包的依赖关系和
node_modules
文件夹,并自动下载和***缺失的模块。
如果我们想更新了 package.json 中的包依赖,在只需执行一下命令:
(sudo) npm update
该命令就可以将包更新为最新版本。
如果我们在 package.json 新增了一个依赖包字段,则可以运行
(sudo) npm install
来***这个新增的包。

参考资料

 

随机推荐