一、npm使用介绍
npm包管理工具
-
1.安装
NPM是随同NodeJS一起安装的包管理工具,首先使用npm包管理工具,你得先下载node.js(纯小白操作安装),这里接不说了,在新版的node.js中已经集成了npm 工具,所以,你直接可以用命令查看。
显示npm版本号:npm -v
更新npm至最新版npm install npm -g
设置淘宝镜像:npm install cnpm -g --registry=https://registry.npm.taobao.org
可以使用cnpm代替npm -
2、使用npm安装包
初始化:npm init
执行此命令会在当前目录生成 package.json
以下为惠亲子package.json文件
<span style="color:#333333">{
"name": "huiqinzi",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node build/www.js",
"test": "ava -s build/test",
"cover": "nyc ava -s build/test && nyc report --reporter=html"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@types/bluebird": "^3.0.37",
"@types/koa": "2.0.38",
"@types/koa-router": "^7.0.21",
"@types/node": "^7.0.18",
"@types/xml2js": "^0.4.2",
"immutable": "^3.8.1",
"koa": "^2.0.1",
"koa-bodyparser": "^4.1.0",
"koa-convert": "^1.2.0",
"koa-cors": "^0.0.16",
"koa-logger": "^2.0.1",
"koa-multer": "^1.0.1",
"koa-router": "^7.0.1",
"koa-static": "^3.0.0",
"minio": "^4.0.0",
"moment": "^2.17.1",
"node-xlsx": "^0.11.0",
"pg": "^6.1.3",
"redis": "^2.6.5",
"request": "^2.80.0",
"sequelize": "^3.30.2",
"validator": "^7.2.0",
"winston": "^2.3.1"
},
"devDependencies": {
"ava": "^0.19.1",
"nyc": "^10.3.2",
"sinon": "^2.2.0",
"supertest": "^3.0.0"
}
}</span>
操作命令:npm install [moduleName]
比如项目要引入mysql模块,npm install mysql@2.16.0(安装2.16.0版本的mysql模块)
在此之前我们可以用$npm info mysql查看一下,当前可用的版本都有哪些。
当使用npm install [moduleName]
命令后项目文件中就会多出一个 nodemodules 文件夹,里边装的就是的依赖项文件
安装的在注册模块的时候,使用npm install [moduleName]--save-dev
来读写到你的package.json文件的devDependencies配置想里边,--save保存在你的dependencies配置项里边
常用的npm命令集合
a.使用npm update <package>
可以把当前目录下nodemodules子目录里边的对应模块更新至最新版本。
b.使用npm update <package> -g
可以把全局安装的对应命令行程序更新至最新版。
c.使用npm cache clear
可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。
d.使用npm unpublish <package>@<version>
可以撤销发布自己发布过的某个版本代码。
二、nodejs语法
- 1.语法
Nodejs 使用的就是js语法,现在多实用使用es6语法 -
2.nodejs模块
一个js文件就是一个模块,和包的区别是一个包有多个模块构成
在编写每个模块时,都有require、exports、module三个预先定义好的变量可供使用requier函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象
<span style="color:#333333">var foo1 = require('./foo'); var foo2 = require('./foo.js'); var foo3 = require('/home/user/foo'); var foo4 = require('/home/user/foo.js'); </span>
exports是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象
<span style="color:#333333">exports.hello = function () { console.log('Hello World!'); }; </span>
module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象
<span style="color:#333333">module.exports = function () { console.log('Hello World!'); }; </span>
-
3.nodejs常用内置模块
fs 提供对文件的操作。http://nodejs.org/api/fs.html http://nodejs.org/api/stream.html path 简化路径相关操作,并提升代码可读性。http://nodejs.org/api/path.html http 提供两种使用方式:http://nodejs.org/api/http.html 作为服务端使用时,创建一个HTTP服务器,监听HTTP客户端请求并返回响应。 作为客户端使用时,发起一个HTTP客户端请求,获取服务端响应。 https 与 http 模块极为类似,区别在于 https 模块需要额外处理SSL证书。http://nodejs.org/api/https.html url 解析URL、生成URL,以及拼接URL。http://nodejs.org/api/url.html querystring 用于实现URL参数字符串与参数对象的互相转换。http://nodejs.org/api/querystring.html zlib 提供了数据压缩和解压的功能。http://nodejs.org/api/zlib.html net 用于创建Socket服务器或Socket客户端。http://nodejs.org/api/net.html****## ##
三、作为服务端开发
- 1.创建服务器
<span style="color:#333333"> var http = require("http"); http.createServer(function(req,res){ res.writeHead(200,{"Content-type":"text/blain"}); res.write("Hello NodeJs"); res.end(); }).listen(8888); </span>
- 2.常用web框架
Express 4.x 框架:http://www.expressjs.com.cn/4x/api.html
Koa 框架:https://www.w3cways.com/doc/koa/<span style="color:#333333"> var http = require("http"); http.createServer(function(req,res){ res.writeHead(200,{"Content-type":"text/blain"}); res.write("Hello NodeJs"); res.end(); }).listen(8888); </span>
<span style="color:#333333"> const Koa = require('koa'); const app = new Koa(); const main = ctx => { ctx.response.body = 'Hello NodeJs'; }; app.use(main); app.listen(8888) </span>
- 3.数据库框架
Sequlize框架:https://itbilu.com/nodejs/npm/VkYIaRPz-.html
四、其中不好理解的部分
-
1.Promise对象 https://www.cnblogs.com/whybxy/p/7645578.html
Promise对象有三种状态: 1 异步操作”未完成”(pending) 2 异步操作”已完成” (resolved) 3 异步操作”失败” (rejected) 这三种状态的变化途径只有2种: 1 异步操作从”未完成”到”已完成” 2 异步操作从”未完成“到”失败” 所以Promise对象的最终结果 只有两种: 1 异步操作成功 Promise对象传回一个值,状态变为resolved 2 异步操作失败 Promise对象抛出一个错误,状态变为rejected
<span style="color:#333333">var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); }); </span>
var http = require("http"); http.createServer(function(req,res){ res.writeHead(200,{"Content-type":"text/blain"}); res.write("Hello NodeJs"); res.end(); }).listen(8888);
-
2.箭头函数
<span style="color:#333333"> ES5: var sum = function(a,b){ console.log(a); console.log(b); return a + b; } sum(1,2);//1 2 3 ES6: let sum0 = (a,b) => { console.log(a); console.log(b); return a + b; }; sum0(2,3);//2 3 5</span>