npm使用入门

NPM是什么


npm

npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you're sharing.

简单来说,npm就是javascript的包管理工具,类似java语法当中的maven, gradle, python的pip。

安装

npm是和Node.js一起发布的,只要安装了Node.js,npm也安装好了,可以从Node.js的下载页下载对应操作系统的安装包安装即可。 安装好后,执行如下命令,检查是否安装成功。

$ node -v
v6.10.0

$ npm -v
4.4.1

但是由于npm自身的更新频率比Node.js高很多,所以通过上面的命令安装的npm可能不是最新版本,可以通过下面的命令单独更新npm

$ npm install npm@latest -g

安装包

执行命令

$ npm install <package_name>

便可以安装对应的包到执行命令的当前目录,并创建一个node_modules的文件夹,然后把需要安装的安装包下载到里面。

使用package.json

通过上面的命令,直接安装的包默认都是最新版本的。但是在项目中,我们怎么让一起开发的同事知道项目中用了哪些包,具体包的版本信息呢?这时package.json就上场了,可以把它想成是java语言中的pom.xml,
python语言中的requirements.txt

一个基本的package.json文件至少需要包含两个重要信息: 包名name和版本信息version
例如:

{
  "name": "my-awesome-package",
  "version": "1.0.0"
}

创建package.json

我们可以使用命令npm init来初始化一个package.json文件,运行这个命令后,它会询问一些关于包的基本信息,根据实际情况回答即可。如果不喜欢这种方式,可以使用npm init --yes命令直接使用默认的配置来创建package.json文件,最后根据需要修改创建好的package.json文件即可。

package.json文件创建好后,我们来看看它长得什么样子吧!

{
  "name": "my_package",
  "description": "",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/ashleygwilliams/my_package.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/ashleygwilliams/my_package/issues"
  },
  "homepage": "https://github.com/ashleygwilliams/my_package"
}

主要字段的含义如下:

  • name: 模块名, 模块的名称有如下要求:

    • 全部小写
    • 只能是一个词语,没有空格
    • 允许使用破折号和下划线作为单词分隔符
  • version: 模块版本信息

  • description:关于模块功能的简单描述,如果这个字段为空的话,默认会从当前目录的READMD.mdREADME文件读取第一行内容作为它的默认值。
  • main: 模块被引入后,首先加载的文件,默认为index.js
  • scripts: 定义一些常用命令入口

类似git一样,npm也可以做一些简单的配置来设置一些我们常用的信息

$ npm set init.author.email "wombat@npmjs.com"

$ npm set init.author.name "ag_dubs"

$ npm set init.license "MIT"

这样下次执行npm init的时候,就会用上我们配置的一些默认信息啦!

安装模块

使用npm install会读取package.json文件来安装模块。安装的模块分为两类
dependenciesdevDependencies,分别对应生产环境需要的安装包和开发环境需要的安装包。

同样在安装模块的时候,可以通过指定参数来修改package.json文件,如

$ npm install <package_name> --save

$ npm install <package_name> --save-dev

来将新安装的模块信息记录到package.json文件。

更新模块

$ npm update

卸载模块

$ npm uninstall <package_name>

如果要在卸载模块的同时,也将他从package.json文件中移除,可以添加跟安装时候一样的参数,例如:

$ npm uninstall --save lodash

全局包管理

默认情况下。我们执行默认的安装命令安装的包都是安装到当前目录下的,只能在当前目录下使用。但是假如我们需要使用一些全局的软件,如grunt,我们可以在安装的时候,添加-g选项来安装,方便后面在任何目录下都可以使用grunt相关的命令

$ npm install -g grunt

同理,更新全局的安装包只需要执行命令

$ npm update -g

为了查看当前哪些包需要更新,可以使用如下命令来查看

$ npm outdated -g --depth=0
Package             Current  Wanted  Latest  Location
vue-cli               2.7.0   2.8.1   2.8.1
webpack              1.13.2   2.2.1   2.2.1
webpack-dev-server   1.14.1   2.4.1   2.4.1

卸载全局安装的包也只需要加上-g选项即可。如

$ npm uninstall -g jshint

创建自己的Node.js模块

一个Node.js模块就是一个可以发布到npm,供其他开发者下载和使用的模块。那么,到底怎样和其他开发者分享我们的模块呢?

首先,我们必须创建一个package.json文件,添加上关于我们想要分享的模块信息,如:模块功能,开发者信息等。

一旦package.json文件创建好后,我们需要创建一个模块被引入时,就加载的文件。
package.jsonmain字段指定的文件,默认为index.js。我们需要在文件中将一个函数赋值给exports模块,方便其他开发者调用我们的模块。如

exports.printMsg = function() {
  console.log("This is a message from the demo package");
}

包(Pacakges)和模块(Modules)

在使用npm的时候,有两个概念容易搞混,那就是包(Pacakges)和模块(Modules)。简单来说,包和模块的区别如下:

  • 包是一个被package.json文件描述了的文件或者目录
  • 模块是可以被Node.js引用的文件或目录

什么是包?

a) a folder containing a program described by a package.json file
b) a gzipped tarball containing (a)
c) a url that resolves to (b)
d) a <name>@<version> that is published on the registry with (c)
e) a <name>@<tag> that points to (d)
f) a <name> that has a latest tag satisfying (e)
g) a git url that, when cloned, results in (a).

什么是模块?

  • A folder with a package.json file containing a main field.
  • A folder with an index.js file in it.
  • A JavaScript file.

npm配置

在使用npm时,我们可以根据个人的需要,指定很多配置信息。
npm的配置信息加载优先级如下(从高到低)

  1. 命令行参数
  2. 环境变量
  3. npmrc文件
    1. 项目级别的npmrc文件(/path/to/my/project/.npmrc)
    2. 用户级别的npmrc文件(~/.npmrc)
    3. 全局的npmrc文件($PREFIX/etc/npmrc)
    4. npm内置的npmrc文件(/path/to/npm/npmrc)

查看配置

$ npm config list -l

配置npm源

最后介绍一个比较重要的配置,当我们使用默认配置从npm官网下载模块时,由于网络的因素,会导致我们的下载速度特别慢。所以,我们可以配置一些国内的镜像来加快我们的下载速度。在这里,我推荐使用淘宝的npm镜像, 具体使用方式如下:

  • 临时使用, 安装包的时候通过--registry参数即可

      $ npm install express --registry https://registry.npm.taobao.org
  • 全局使用

      $ npm config set registry https://registry.npm.taobao.org
      // 配置后可通过下面方式来验证是否成功
      npm config get registry
      // 或
      npm info express
  • 使用cnpm使用

      // 安装cnpm
      npm install -g cnpm --registry=https://registry.npm.taobao.org
    
      // 使用cnpm安装包
      cnpm install express

更多使用

请参考官方文档

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

实用主义学Python(小白也容易上手的Python实用案例)

12-24
原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会  【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例
©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值