前言安装开发流程模块系统
前言
这是该系列文章的第二篇,主要介绍Node.js的安装,开发流程,模块系统
安装
下载地址:https://nodejs.org/en/
根据实际情况选择适合自己电脑的Node版本,注意选择稳定版[LTS],目前最新稳定版是12.14.1
安装流程
注意,Node支持高版本覆盖低版本,如果你电脑已经安装过Node高版本(如13),使用12版本的无法直接安装,需要卸载高版本后重装。
windows系统,整个安装过程傻瓜式安装即可
linux系统,以Ubuntu为例 (先安装后升级)
sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install npm -g
npm install –g n
n stable //升级node.js到最新稳定版
安装检测
终端输入node -v ,显示版本号则表示安装成功,之后就可以愉快的使用Node.js进行开发了
开发流程
Node.js可以简单理解为js解释器,浏览器让js可以跑在客户端,Node.js让js可以跑在服务端。所以,写好的js代码,直接运行就好了.
hello world
//新建一个js文件,名称可自定义,这里就叫app.js
// 写点代码
console.log("hello world")
// 终端运行 node app.js 此时你会发现终端打印出了hello world,并且光标返回,这意味着本次运行结束。值得注意的是,代码如果有改动,需要打断重新运行才会执行最新代码
热更新
更多时候,我们需要对程序进行监听,如果代码有改动,就自动重启,这个时候nodemon 就登场了
- 全局安装:npm i nodemon -g
- 启动:nodemon 和node启动方式一样,nodemon app.js ,此时就是热更新了
模块系统
http
如果仅仅是打印级别的开发,实在是无趣。Node.js内置的http模块,可以让你真正体验一把分分钟搭建一个服务器的感觉,这里只进行简单的介绍,真正的服务器搭建都是依赖框架的(express,koa2,egg)
使用http模块快速搭建服务器
//引入核心模块http
var http = require("http");
//创建服务器
var server = http.createServer(function (request, response) {
response.end("hello world");
});
//运行服务器,监听3000端口(端口号可以任改,业内推荐3000+)
server.listen(3000, function () {
//打开浏览器,127.0.0.1:3000查看结果
console.log("服务器启动成功...");
}); fs模块
涉及到IO处理的,基本都会用到fs模块,读写,拷贝,遍历文件夹…,Node大部分都是异编程,但fs模块,基本都支持同步编写。readFile(异步),readFileSync(同步)
文件读取var fs = require('fs')
fs.readFile('./a.txt', function (error, data) {
if (error) {
console.log('读取文件失败')
} else {
console.log(data.toString());//读取结果是二进制,要转化成我们认识的
}
}) 文件写入
var fs = require('fs')
fs.writeFile('./a.txt', '冷月心', function (error) {
if (error) {
console.log('写入失败');
} else {
console.log('写入成功');
}
}) 遍历文件夹
const fs = require('fs');
const path = require('path');
const folderPath = path.resolve('./testFolder');//指定要遍历的文件夹路径
const cycleFolder = (folderPath) => {
//根据指定要遍历的文件夹路径,返回文件列表数组,保存在files中
fs.readdir(folderPath, (err, files) => {
if (err) throw err;
files.forEach(filename => { //遍历读取到的文件列表数组
const absolutePath = path.join(folderPath, filename); //获取当前文件的绝对路径
//根据 fs.stat方法,返回一个提供有关文件的信息fs.Stats对象
fs.stat(absolutePath, (err, stats) => {
if (err) throw err;
const flag = stats.isDirectory();//文件夹递归遍历,文件直接输出绝对路径
flag ? cycleFolder(absolutePath) : console.log(absolutePath);
})
});
});
}
//调用文件夹遍历方法
cycleFolder(folderPath) path模块
path模块用于路径解析和处理,比如获取扩展名,文件名,路径拼接…
文件名处理
//获取自定义格式的文件名
const path = require('path');
const getFileName = (filepath, type = 1) => {
let result = '';
if (type === 1) {
result = path.basename(filepath);
} else if (type === 2) {
result = path.extname(filepath);
} else {
let basename = path.basename(filepath);
let extname = path.extname(filepath);
result = basename.substring(0, basename.indexOf(extname));
}
return result;
}
// console.log(getFileName("./date.js", 1))//date.js
// console.log(getFileName("./date.js", 2))//.js
// console.log(getFileName("./date.js", 3))//date os模块
顾名思义,和操作系统相关的,不太常用
var os = require('os')
// 获取当前机器的 CPU 信息
console.log(os.cpus())
// memory 内存
console.log(os.totalmem()) 其他核心模块
zlib(解压缩),dns(域名解析),crypto(加密)…
文件模块
自定义的js文件都属于文件模块,上一篇文章有提到,使用exports和module.exports导出,require导入,不再赘述
第三方模块
通过npm 安装的都属于第三方模块,引入方式与核心模块一致
文件夹压缩
// 安装 npm i compressing
const compressing = require('compressing');
//folder为自定义要压缩的文件夹
compressing.zip.compressDir(folder, folder+'.zip')
.then(() => {
console.log('ok');
})
.catch(err => {
console.log(err);
return
});
|