详解Nodejs之npm&package.json


Posted in NodeJs onJune 15, 2017

一直以来,作为前端开发,在公司都是先写好页面,然后再跟后端合作,将数据填入前端页面中,但是偶尔自己闲来无事,也会看一些框架什么的,然后利用框架做个单页面应用啊,app什么的,这时候页面的数据总是一些假数据,而关于数据请求的部分就没办法做(因为没有后台嘛)。所以我感觉是时候学习一下node了,这对于我以后要学的webpack,前端工程化等也有一定帮助。
作为前端,因为经常用到gulp,webpack等工具,所以我们最常见到的是npm和package.json,所以先总结一下它们俩。

npm

初始化

$ npm init
or
$ npm init --y

在做前端开发的时候,我们经常会用到构建工具,例如gulp,webpack等,为了让别人也可以参与进来,我们需要告诉别人项目有些什么依赖包,然后让别人也安装同样的依赖包,而npm init产生的package.json就是用来记录我们项目中的依赖的,同样的,在做node开发的时候,也会用刀依赖包,同样需要package.json记录。

在终端输入npm init会询问package.json的各种信息,从而确认。如果全部使用默认值,可以直接在终端输入npm init --y快速生成package.json。

安装依赖包

$ npm install <package name> <package name> ...

$ npm install <package name> -g

$ npm install <package name> --save

$ npm install <package name> --save-dev

$ npm install <pacakage name> --O //--save-optional -B: --save-bundle -E: --save-exact

npm install <package name> -g 表示全局安装,需要注意的是全局模式并不是将一个模块安装包安装为一个全局包的意思,它并不意味着可以从任何地方通过require()来引用,-g的含义是将一个包安装为全局可用的可执行命令。这意味着,所有通过-g安装的包都可以在终端以命令方式运行,例如gulp,webpack等。

--save--save-dev的区别在于前者是生产环境中项目运行需要的依赖,安装后被记录在package.json中的dependencies关键字下;而后者是开发时候需要的依赖,安装后被记录在devDependencies关键字下。

同样--O/B/E分别会被记录到对应的关键字下。

更新依赖包

$ npm update

$ npm update -g

$ npm outdated

$ npm outdated -g

在项目目录下运行npm update可以升级项目中所用依赖到最新版本,而npm update -g则可以升级全局安装的依赖包到最新版。

npm outdated用于检查模块是否过时并列出。

卸载依赖

$ npm uninstall <package name> <package name> ...

$ npm uninstall <package name> -g

$ npm uninstall <package name> --save

$ npm uninstall <package name> --save-dev

使用npm uninstall可以卸载依赖,但是卸载后,在package.json中的纪录并不会被删除,要想在卸载依赖的同时删除在package.json中的纪录,需要在卸载的时候使用安装时的所有的选项,例如,如果安装时候使用了npm install <package name> --save则卸载的时候,同样使用npm uninstall <pacakage name> --save,而如果使用了--save-dev,卸载时候也需要加相同的选项。

使用自定义npm命令

在package.json中,有一个scripts关键字,只需要在该关键字内写入自定义命令以及对应执行的实际命令即可。

"scripts":{
  "test": "nonde ./test.js",
  "dev": "gulp --gulpfile gulpfile-dev.js",
  "build": "gulp --gulpfile gulpfile-build.js"
}

上面的配置中,只要我们在终端运行npm dev就是运行了gulp --gulpfile gulpfile-dev.js,这样就省去了我们在终端输入很长的一段命令,非常方便。

其他

npm view <pacakage name>可以查看包的package.json文件,如果只是看包的某个特性,在后面加上相应的key即可,例如npm v zepto version就是查看当前安装的zepto的版本,v是view的简写。

npm ls可以分析出当前当前项目下能够通过模块路径找到的所有包,并生成依赖树。

npm doc <package name>可以打开该依赖包的官网,其实就是打开了package.json中的homepage。

package.json文件

在运行npm init后会生成package.json文件,该文件用于记录项目中所用到的依赖以及项目的配置信息(比如名称、版本、许可证等)。npm install命令根据这个配置文件自动下载项目运行和开发所需要的依赖。

一个比较完整的package.json文件如下:

{
  "name": "project",
  "version": "1.0.0",
  "author": "张三",
  "description": "第一个node.js程序",
  "keywords":["node.js","javascript"],
  "repository": {
    "type": "git",
    "url": "https://path/to/url"
  },
  "license":"MIT",
  "engines": {"node": "0.10.x"},
  "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
  "contributors":[{"name":"李四","email":"lisi@example.com"}],
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "latest",
    "mongoose": "~3.8.3"
  },
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-concat": "~0.3.0"
  }
}

在package.json中一些关键字的含义:

1.name:包名

2.version:版本号

3.description:包的描述

4.homepage:包的官网url

5.autor:包的作者名字

6.contributors:包的其他贡献者

7.dependencies:依赖包的列表,使用npm install可以安装依赖包到node_medule目录下

8.repository:包代码存放的地方,可以是git或者svn

9.keywords:关键字

10.scripts:脚本说明对象。它主要被包管理器用来安装、编译、测试和卸载包,示例如下:

"scripts":{

  “install”:"install.js",

  "test":"test.js"

}

11.main:模块引入方法require()在引入包时,会优先检查这个字段,并将其作为包中其余模块的入口,如果该字段不存在,则node会检查目录下的index.js,index.node,index.json作为默认入口。

12.devDependencies:一些模块只在开发时需要依赖,配置这个属性,可以提示包的后续开发者安装依赖包

以上就是关于node中npm和package.json的总结。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
nodeJS进程管理器pm2的使用
Jan 09 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
详解nodejs模板引擎制作
Jun 14 #NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 #NodeJs
nodeJS实现路由功能实例代码
Jun 08 #NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 #NodeJs
详解nodejs异步I/O和事件循环
Jun 07 #NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 #NodeJs
nodejs mysql 实现分页的方法
Jun 06 #NodeJs
You might like
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
小程序指纹验证的实现代码
2018/12/04 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python递归函数定义与用法示例
2017/06/02 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python3对接mysql数据库实例详解
2019/04/30 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
村官学习十八大感想
2014/01/15 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书