初始化 npm init -y
如果没有在初始命令行状态 ctrl+c 回到初始命令行
{ //项目名称,插件名称,上传到npmjs.com中允许别人查找使用 "name": "0110", //1.2.3 1是大版本 2是中型版本(小版本) 3是小型版本(微版本) //1.大版本 重新重构了项目,大的框架发生改变 //2.中型版本 需要给项目当中来添加一些新的功能 //3.小型版本 修补项目中bug和漏洞 "version": "1.0.0", //执行node项目的入口文件 "main": "index.js", "scripts": { //脚本,执行对应的node命令 "test": "echo \"Error: no test specified\" && exit 1", //脚本执行方式有两种, //一种start install这样的脚本直接通过 npm start "start": "node main.js", //另一种是其他任何字符,执行时 npm run 字符 "abc": "node main.js" }, "keywords": [], //关键词 在npmjs官网上搜索关键词可以被查找使用 "author": "",//作者 "license": "ISC",//版权 "description": "",//描述 做的插件可以被别人快速找到并且查看它的信息 "dependencies": { //项目依赖 项目当中用到的插件 "lodash": "^4.17.21" }, "devDependencies":{ //开发依赖 打包、测试 "gulp":"^4.0.2" } }
安装
npm install 包名 原命令 npm i 包名 简写命令
npm i包名 安装这个插件的最新版本 npm i包名@3 安装这个插件的版本为3这个大版本的最高版本 npm i包名@3.1安装这个插件的版本为3.1这个版本的最高版本 npm i包名@3.1.20 安装这个插件的版本为3.1.20这个版本 3.1.1-3.1.24 3.2.1-3.2.20 4.0.0-4.1.2 因为node本身就有版本不兼容性,所以有很多的包也有不兼容性
npm i 包名 -g 全局安装 需要下载一些命令插件,就需要全局安装 全局命令安装在node的目录下面 使用nvm -g安装的就是在当前对应的node版本中的文件中 一旦切换node版本,就需要重新安装全局的命令
anywhere
服务器插件 类似于live Server 可以修改当前服务的端口号 npm i anywhere -g anywhere 执行 anywhere 端口号 执行
nodemon
node服务自动重启插件 npm i nodemon -g nodemon node 入口文件
nrm
切换npm库的镜像地址 npm i nrm -g nrm ls 显示当前所有镜像地址 nrm use 镜像地址名 切换镜像地址 nrm test 镜像地址名 测试指定的镜像地址
npm i 包名 -S npm i 包名 npm i 包名 ---save 项目依赖下载
三种一样 npm i lodash -S npm i lodash npm i lodash --save
安装后会在package.json中的 "dependencies":{ }
"jQuery":"^3.1.0" 锁定大版本 major "jQuery":"~3.1.0" 锁定大版本和小版本minor "jQuery":"3.1.0" 锁定所有版本 "jQuery":"*" 最新版本 如果更新时,会根据这个列表内容来更新,比如锁定大版本时,会更新当前指定的大版本中最高版本
npm i 包名 -D npm i 包名 ---save-dev 开发依赖下载 打包、压缩、测试
gulp
打包工具 npm i gulp -D npm i gulp --save-dev
webpack
打包工具 npm i webpack@4 -D npm i webpack@4 --save-dev
更新安装
npm update npm i 安装和更新 package.json 中的所有dependencies和devDependencies里面的插件 "dependencies": { "lodash": "^4.17.21" }, "devDependencies": { "gulp": "^4.0.2" }
卸载
npm uninstall 包名
清除
因为安装过程中出现断网,错误等情况造成无法重新安装,安装时报错4048,用来清除缓存安装的包 错误码是-4048需要清除 npm cache verify npm cache clean --force
npm 包管理 下载,上传、更新插件(全局命令插件、项目依赖的插件、开发依赖的插件...) package.json
node运行
创建一个js文件,在js中可以写入任何js内容,但是不能写DOM、BOM、事件 在命令行中 NODE ./路径/文件名 例如在 js文件夹下有一个main.js node ./js/main.js 或者node ./js/main
开始创建服务器后端
var http=require("http") 加载http模块 http是一种协议,node将这总创建http服务的方式封装在一个插件中,因为是node自带的所以我们叫它http模块 var http =require("http");与ES6中 import http from "http" 相同 因为node在不同版本中支持ES6不同,操作也不同,关于node如果操作ES6的模块化暂时没有 require 用于ES5的node模块化开发 这种方式commonJS
在a.js中使用 module.exports={a:1,b:2} 在main.js中 不需要带扩展名 必须路径以./开始 var obj=require("./a")
如果一个Js中需要导出多个内容 在 a.js中使用 module.exports={a:1,b:2}; 在main.js中 不需要带扩展名 必须路径以./开始 var obj=require("./a") 如果一个js中需要导出多个内容 在b.js中使用 exports.obj={a:1,b:2}; exports.abc=function(){ console.log("aaa"); } 在main.js中 var {obj:obj1,abc}=require("./b); 这里的:是指起别名
创建服务
创建一个http的服务,并且返回该服务对象 var server=http.createServer(function(req,res){ }) server.listen(4001); server.listen(端口号,IP地址,当开启服务执行函数); server.listen(4001,"10.9.25.101",function(){ console.log("服务开启") }); 开启服务,并且侦听这个服务的端口号是4001 req 请求 客户端向服务器发送的请求数据存在这个对象中 res 响应 服务器响应客户端发送信息在这个对象中 res.write("abc"); 给响应信息中写入内容 res.end(); 响应信息写入完毕发送给客户端 SSR Server Side Render CSR Client Side Redner 设置响应头 res.writeHead(状态码,响应头对象); 响应头对象 Content-Type 内容类型 MIME类型 text/html 文本和html内容 返回的内容就会转换为html application/json json格式 image/jpg jpg格式 ;charset=utf-8 设置返回的内容为utf-8编码转换 { "Content-Type":"text/html;charset=utf-8" }
var xhr=new XMLHttpRequest(); 侦听ajax加载服务器发回的数据完成 xhr.addEventListener("load",loadHandler); 打开服务通信 使用get方式通信,url地址+?发送的数据 key1=value1&key2=value2 xhr.open("GET","http://localhost:4003?"+str); 发送数据 xhr.send(); function loadHandler(e){ console.log(xhr.response) }
GET 在通信时,一般只做了一次通信 通过url后面的search ?后面来携带发送给服务端的数据 这种发送时,提交数据是明文,而且不能携带过多数据 如果在同域情况下cookie也是可以携带数据,跨域情况cookie不能携带数据 当使用GET发送请求,目的本来就是获取,其实主要并不是发送数据给服务端,目的还是获取数据, 只不过在这里通过url访问时携带了一些明文的数据 如果这次请求的地址与上次请求的地址相同时,这种情况会开启访问缓存
当发送数据时,通过send将数据发送给服务端 可以发送字符串,但是不能直接发送数组和对象 POST 一般会发起两次请求 地址请求,数据发送请求 POST提交数据是不会缓存 一般可以发送大量的数据 var xhr=new XMLHttpRequest(); xhr.addEventListener("load",loadHandler); xhr.open("POST","http://localhost:4004"); xhr.send(str); function loadHandler(e){ console.log(xhr.response) }