npmnpm离线安装包下载时会自动安装该包依赖的其他包么

分享用npm安装/删除/发布/更新/撤销发布包-js教程-PHP中文网QQ群微信公众号还没有收藏分享用npm安装/删除/发布/更新/撤销发布包
一.什么是npm?npm是javascript的包管理工具,是前端模块化下的一个标志性产物简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率 1.从社区的角度:把针对某一特定问题的模块发布到npm的服务器上,供社区里的其他人下载和使用,同时自己也可以在社区里寻找特定的模块的资源,解决问题2.从团队的角度:有了npm这个包管理工具,复用团队既有的代码也变的更加地方便 二.利用npm安装包npm安装的方式——本地安装和全局安装 什么时候用本地/全局安装?1.当你试图安装命令行工具的时候,例如 grunt CLI的时候,使用全局安装全局安装的方式:npm install -g 模块名称2.当你试图通过npm install 某个模块,并通过require('XXX')的方式引入的时候,使用本地安装本地安装的方式:npm install 模块名称 你很可能遇到的问题在你试图本地安装的时候一般都会遇到permission deny的问题例如我这里第一次尝试全局安装express,输入npm install -g express 【吐槽】而且让人无语的是在安装了许多依赖后才提醒你权限不够... 解决方式:1. sudo npm install -g XXX ,以管理员的身份安装评价:每次都要输入账号和密码,非常繁琐,且官方并不推荐( You could also try using sudo, but this should be avoided)2. sudo chown -R 你的账号名 npm所在目录的路径 /{lib/node_modules,bin,share}评价:官方推荐的做法,chown全称为change owner,即将npm目录的所有者指定为你的名字(授予权限),-R表示对指定目录下所有的子目录和文件也都采取同种操作。 &1&首先,通过 npm config get prefix获取npm所在目录的路径,例如像这样:&2&在命令行输入 sudo chown -R 你的账号名 npm所在目录的路径 /{lib/node_modules,bin,share},例如:【注意】{lib/node_modules,bin,share}中的大括号是要写上去的再次全局安装express:输入npm install -g express 安装成功 3.sudo chmod 777 npm所在目录(不推荐)评价:这是网上经常能够看到的解决方式,但,官方教程里没有对此有任何提及。chmod代表change mode更改读写模式,对该目录授予最高权限,任何人可读可写,这是很危险的 本地安装的时候,将依赖包信息写入package.json中 注意一个问题,在团队协作中,一个常见的情景是他人从github上clone你的项目,然后通过npm install安装必要的依赖,(刚从github上clone下来是没有node_modules的,需要安装)那么根据什么信息安装依赖呢?就是你的package.json中的dependencies和devDepencies。所以,在本地安装的同时,将依赖包的信息(要求的名称和版本)写入package.json中是很重要的! npm install 模块:安装好后不写入package.json中npm install 模块 --save 安装好后写入package.json的dependencies中(生产环境依赖)npm install 模块 --save-dev 安装好后写入package.json的devDepencies中(开发环境依赖)示例:我在项目下安装webpack:进入项目终端输入npm install安装完毕后我的package.json卸掉webpack再重装:输入npm install webpack --save后:卸掉webpack再重装:npm install webpack --save-dev后: 三.利用npm删除包删除模块其实很简单: 删除全局模块npm uninstall -g &package&利用npm删除本地模块npm uninstall 模块 删除本地模块时你应该思考的问题:是否将在package.json上的相应依赖信息也消除?npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息npm uninstall 模块 --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息npm uninstall 模块 --save-dev 删除模块,同时删除模块留在package.json中devDependencies下的对应信息 四.利用npm 发布包发布包之前你首先要有一个npm的账号第一次发布包:在终端输入npm adduser,提示输入账号,密码和邮箱,然后将提示创建成功非第一次发布包:在终端输入npm login,然后输入你创建的账号和密码,和邮箱,登陆【注意】npm adduser成功的时候默认你已经登陆了,所以不需要再接着npm login. 例子: (因为我已经创建过账号了,所以直接登录)1.进入项目目录下,然后再登陆: 2.通过npm publish发包 包的名称和版本就是你项目里package.json里的name和version哦! 3然后你到npm的搜索里就可以找到被发布的APP啦! 【注意点1】不能和已有的包的名字重名!例如我尝试把包名改成'react'显然已有的包: 然后发包的时候就会...(翻译:你没有发布react包的权限,请问你是以react所有者的身份登陆的吗?)【提示】在发包前可以通过npm的搜索引擎查找是否已存在相同名称的包 【注意点2】还有一点要注意的是npm对包名的限制:不能有大写字母/空格/下滑线!(其实在上面的例子中我原本打算写成penghuwanAPP的,报错。。。改成penghuwan_app,又报错,最后不得不改成penghuwanapp。。。)
【注意点3】你的项目里有部分私密的代码不想发布到npm上?将它写入.gitignore 或.npmignore中,上传就会被忽略了 五.利用npm撤销发布包这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!) 示例:我现在将之前发布的包penghuwanapp撤销掉:输入npm unpublish 包名 【吐槽】注意看红框框住的字,你就知道npm官方撤销已发布的包对这种行为的态度了.... 【注意】如果报权限方面的错,加上--force 再去npm搜索已经搜不到了 1根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours)2即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了) 例如我在撤销包后尝试再发布同一名称+同一版本的包:报错,并建议我修改包的版本 npm unpublish的推荐替代命令:npm deprecate &pkg&[@&version&] &message&使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~' 六.npm更新发布后的包:事实上npm更新包和发布包的命令是一样的,都是npm publish,不同之处在于,你需要修改包的版本 所以步骤是:1.修改包的版本(package.json里的version字段)2.npm publish关于修改版本的细节请看下面: 七.npm的版本控制——Semantic versioning在我们的package.json里面有一个version字段。那么,怎么在项目不断构建的过程中调整版本呢?npm有一套自己的版本控制标准——Semantic versioning(语义化版本) 具体体现为:对于&version&:&x.y.z&1.修复bug,小改动,增加z2.增加了新特性,但仍能向后兼容,增加y3.有很大的改动,无法向后兼容,增加x 例如:我原本的项目是1.0.0版本的话若是1中情况,变为1.0.1若是2中情况,变为1.1.0若是3中情况,变为2.0.0 通过npm version &update_type&自动改变版本update_type为patch, minor, or major其中之一,分别表示补丁,小改,大改 例如我在shell去改动项目版本 再来看看我的package.json,已经变成了v1.0.0【完】以上就是分享用npm安装/删除/发布/更新/撤销发布包的详细内容,更多请关注php中文网其它相关文章!共3篇740点赞收藏分享:.&猜你喜欢PHP中文网:独家原创,永久免费的在线,php技术学习阵地!
All Rights Reserved | 皖B2-QQ群:关注微信公众号在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
环境:1.mac2.node版本 v5.7.13.npm版本 v3.6.0
在使用 npm 安装插件的时候,发现总是会安装很多多余的依赖包, 如执行:
npm install gulp-ruby-sass --save-dev
然后就安装了 100 多个依赖包 [如下图] 别人装的也没这么多的依赖包啊,有没有人遇到过这种情况?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
NPM 的依赖不再是以前树形的结构(比如 clone如果还依其他的,就会在 clone里面创建一个 node_module里面是clone依赖的模块),现在是所有有的依赖都放到你项目目录的node_module里面。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
新的目录结构就是这样的!我开始还以为是我使用npm有问题(O_O)?后来一查,才知道npm3改了目录结构!是正常的,你不用担心!
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:详解Node.js包的工程目录与NPM包管理器的使用
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Node.js包的工程目录与NPM包管理器的使用,可以帮助编程者更好地组织Node.js代码文件,需要的朋友可以参考下
了解了以上知识后,现在我们可以来完整地规划一个工程目录了。以编写一个命令行程序为例,一般我们会同时提供命令行模式和 API 模式两种使用方式,并且我们会借助三方包来编写代码。除了代码外,一个完整的程序也应该有自己的文档和测试用例。因此,一个标准的工程目录都看起来像下边这样。
- /home/user/workspace/node-echo/
# 工程目录
# 存放命令行相关代码
# 存放文档
# 存放API相关代码
- node_modules/
# 存放三方包
# 存放测试用例
package.json
# 元数据文件
# 说明文件
其中部分文件内容如下:
/* bin/node-echo */
var argv = require('argv'),
echo = require('../lib/echo');
console.log(echo(argv.join(' ')));
/* lib/echo.js */
module.exports = function (message) {
/* package.json */
"name": "node-echo",
"main": "./lib/echo.js"
以上例子中分类存放了不同类型的文件,并通过 node_moudles 目录直接使用三方包名加载模块。此外,定义了package.json 之后,node-echo 目录也可被当作一个包来使用。
NPM 是随同 NodeJS 一起安装的包管理工具,能解决 NodeJS 代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从 NPM 服务器下载别人编写的三方包到本地使用。
允许用户从 NPM 服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。
可以看到,NPM 建立了一个 NodeJS 生态圈,NodeJS 开发者和用户可以在里边互通有无。以下分别介绍这三种场景下怎样使用 NPM。
下载三方包
需要使用三方包时,首先得知道有哪些包可用。虽然 npmjs.org 提供了个搜索框可以根据包名来搜索,但如果连想使用的三方包的名字都不确定的话,就请百度一下吧。知道了包名后,比如上边例子中的 argv,就可以在工程目录下打开终端,使用以下命令来下载三方包。
$ npm install argv
argv@0.0.2 node_modules\argv
下载好之后,argv 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('argv')的方式就好,无需指定三方包路径。
以上命令默认下载最新版三方包,如果想要下载指定版本的话,可以在包名后边加上@&version&,例如通过以下命令可下载 0.0.1 版的 argv。
$ npm install argv@0.0.1
argv@0.0.1 node_modules\argv
如果使用到的三方包比较多,在终端下一个包一条命令地安装未免太人肉了。因此 NPM 对 package.json 的字段做了扩展,允许在其中申明三方包依赖。因此,上边例子中的 package.json 可以改写如下:
"name": "node-echo",
"main": "./lib/echo.js",
"dependencies": {
"argv": "0.0.2"
这样处理后,在工程目录下就可以使用 npm install 命令批量安装三方包了。更重要的是,当以后 node-echo 也上传到了 NPM 服务器,别人下载这个包时,NPM 会根据包中申明的三方包依赖自动下载进一步依赖的三方包。例如,使用 npm install node-echo 命令时,NPM 会自动创建以下目录结构。
- project/
- node_modules/
- node-echo/
- node_modules/
如此一来,用户只需关心自己直接使用的三方包,不需要自己去解决所有包的依赖关系。
安装命令行程序
从 NPM 服务上下载安装一个命令行程序的方法与三方包类似。例如上例中的 node-echo 提供了命令行使用方式,只要 node-echo 自己配置好了相关的 package.json 字段,对于用户而言,只需要使用以下命令安装程序。
$ npm install node-echo -g
参数中的 -g 表示全局安装,因此 node-echo 会默认安装到以下位置,并且 NPM 会自动创建好 Linux 系统下需要的软链文件或 Windows 系统下需要的.cmd文件。
- /usr/local/
# Linux系统下
- lib/node_modules/
+ node-echo/
- %APPDATA%\npm\
# Windows系统下
- node_modules\
+ node-echo\
node-echo.cmd
第一次使用 NPM 发布代码前需要注册一个账号。终端下运行 npm adduser,之后按照提示做即可。账号搞定后,接着我们需要编辑 package.json 文件,加入 NPM 必需的字段。接着上边 node-echo 的例子,package.json 里必要的字段如下。
"name": "node-echo",
# 包名,在NPM服务器上须要保持唯一
"version": "1.0.0",
# 当前版本号
"dependencies": {
# 三方包依赖,需要指定包名和版本号
"argv": "0.0.2"
"main": "./lib/echo.js",
# 入口模块位置
"node-echo": "./bin/node-echo"
# 命令行程序名和主模块位置
之后,我们就可以在 package.json 所在目录下运行 npm publish 发布代码了。
使用 NPM 下载和发布代码时都会接触到版本号。NPM 使用语义版本号来管理代码,这里简单介绍一下。
语义版本号分为 X.Y.Z 三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
+ 如果只是修复bug,需要更新Z位。
+ 如果是新增了功能,但是向下兼容,需要更新Y位。
+ 如果有大变动,向下不兼容,需要更新X位。
版本号有了这个保证后,在申明三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于 0.0.x 系列的最新版 argv。NPM 支持的所有版本号范围指定方式可以查看官方文档。
除了本章介绍的部分外,NPM 还提供了很多功能,package.json 里也有很多其它有用的字段。除了可以在 npmjs.org/doc/ 查看官方文档外,这里再介绍一些 NPM 常用命令。
NPM 提供了很多命令,例如 install 和 publish,使用 npm help 可查看所有命令。
使用 npm help 可查看某条命令的详细帮助,例如 npm help install。
在 package.json 所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。
使用npm update &package&可以把当前目录下 node_modules 子目录里边的对应模块更新至最新版本。
使用npm update &package& -g可以把全局安装的对应命令行程序更新至最新版。
使用npm cache clear可以清空 NPM 本地缓存,用于对付使用相同版本号发布新版本代码的人。
使用npm unpublish &package&@&version&可以撤销发布自己发布过的某个版本代码。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
环境:1.mac2.node版本 v5.7.13.npm版本 v3.6.0
在使用 npm 安装插件的时候,发现总是会安装很多多余的依赖包, 如执行:
npm install gulp-ruby-sass --save-dev
然后就安装了 100 多个依赖包 [如下图] 别人装的也没这么多的依赖包啊,有没有人遇到过这种情况?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
NPM 的依赖不再是以前树形的结构(比如 clone如果还依其他的,就会在 clone里面创建一个 node_module里面是clone依赖的模块),现在是所有有的依赖都放到你项目目录的node_module里面。
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:

我要回帖

更多关于 npm 安装包失败 的文章

 

随机推荐