Node是什么
Node是一个基于Chrome V8引擎的JavaScript代码运行环境,这也是为什么Node可以运行JavaScript代码的原因,Node内部内置了和浏览器类似的环境.
验证node是否在window系统电脑上安装成功,打开cmd,输入node -v看是否有显示版本。
node-v 可以运行的原因是在PATH环境变量当中已经自动配置好了
node.exe的位置的环境变量,当在cmd窗口运行node命令时,会自动运行这个node.exe。
Node.js的组成
- JavaScript由ECMAScript,Dom,Bom组成
- Node.js由ECMAScript以及Node环境提供的一些附加API组成,包括文件读取,网络响应,路径等等。
Node,js基础语法
所有ECMAScript语法在node环境中均可以使用
function f() {
console.log("aa");
}
f();//aa
node.js模块化开发
过往非模块化开发的缺点
- javascript中的文件依赖关系,在以前非模块化开发的代码中,我们常常需要人为手动去分析js代码,找到其中额的依赖关系。
- 在以前非模块化开发的情况中,文件与文件之间的变量可能会产生冲突。例如,b.ja当中引入了a.js文件,两者都有num变量,这时候b中的num变量会把a中num变量覆盖掉。
软件开发中的模块化
一个功能就是一个模块,多个模块可以组成完整的应用,抽离一个模块并不会影响其他功能的正常运行。
模块化开发规范
- 规定一个js文件就是一个模块,默认情况下,模块内部定义的变量和函数在外部无法得到。
- 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。
- 使用module.exports的方式导出变量/函数
//01-helloworld.js
let f = name => `hello${name}`;
module.exports.f = f;
//02-module.js
const f = require("./01-helloworld");
console.log(f.f("lizeyu"));//hellolizeyu
exports和module.exports的区分
exports是module.exports的别名,在内存中指向的是同一块内存地址,最终导出的以module.exports为准。当module.exports导出的是对象的时候,require导入的也是由module.exports导出的对象。

系统模块
定义:Node运行环境提供的API.因为这些API都是以模块化的方式进行开发的,所以我们又称Node运行环境提供的API为系统模块。
fs模块
系统模块fs文件操作 f:file文件,s:system系统,文件操作系统。
const fs = require ('fs');
读取文件内容
fs.reaFile('文件路径/文件名称'[,文件编码'],callback)
例子:读取文件实例
//读取上一级css目录下中的base.css
fs.readFile("../css/base.css','utf-8'(err,doc)=>{
//如果文件读取发生错误参数err的值为错误对象否则err的值为null
//doc参数为文件内容
if(err==null){
//在控制台中输出文件内容
console.log(doc);
}
});
例子:写入文件内容,应用于日志的打印
fs.write('文件路径','数据',callback)
const fs = require('fs')
//读取上一级css目录下中的base.css
fs.readFile("../css/base.css','utf-8'(err,doc)=>{
//如果文件读取发生错误参数err的值为错误对象否则err的值为null
//doc参数为文件内容
if(err==null){
//在控制台中输出文件内容
console.log(doc);
}
});
//当要写入的文件不存在的时候,会自动创建该文件
系统模块path路径操作
为什么要进行路径拼接 不同操作系统的路径分隔符不统一,/public/uploads/avatar,Windows上是\ /,Linux上是/
在网站当中的图片上传功能,我们需要把图片存储到服务器,而path模块就可以判断当前系统,使用当前系统的分隔符进行路径的拼接处理。
路径拼接语法
path.join('路径1','路径2',...)
在node里面使用相对路径大多数时候是相对于命令行工具的当前工具目录,所以最好使用绝对路径,使用__dirname来获取当前文件所在的绝对路径;使用require方法的时候里面的路径是相对于当前文件的路径。
第三方模块
- 以js文件的形式存在,提供实现项目具体功能的API接口。
- 以命令行工具形式存在,辅助项目开发
下载与卸载第三方模块
npm install 包名 -下载
npm uninstall package 模块名称
全局安装,加上-g区分;本地安装,用--save区分
nodemon
简介:nodemon是一个命令行工具,用以辅助项目开发。 在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。
安装:npm install nodemon -g 使用:在命令行工具中使用nodemon代替node命令
Gulp
作用:项目上线,HTML、CSS、JS文件压缩合并、语法转换(es6、less...)、公共文件抽商、修改文件浏览器自动刷新。
使用:
- 使用npm install gulp下载gulp库文件
- 在项目根目录下建立gulpfile.js文件
- 重构项目的文件夹结构src目录放置源代码文件dist目录放置构建后文件
- 在gulpfile.js文件中编写任务.
- 在命令行工具中执行gulp任务
//gulpfile.js
//输出文件到指定目录
//引入gulp模块
const gulp = require('gulp');
//建议任务,参数是任务名以及回调函数,区分多个任务的标识就是任务名称
gulp.task('first',(done)=>{
gulp.src('./src/css/base.css')
.pipe(gulp.dest('./dist/css'));
done();
});
html-min:html代码压缩
const htmlmin = require('gulp-htmlmin');
gulp.task('htmlmin',(done)=>{
gulp.src('./src/*')
//压缩html代码,折叠空格操作
.pipe(htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('./dist'));
done();
});
gulp-less 将less代码转换为css代码以及压缩css代码
const less = require('gulp-less');
const csso = require('gulp-csso');
gulp.task('css-min',(done)=>{
//选择所有的css和less文件
gulp.src(['./src/css/*.css','./src/css/*.less'])
//less文件转换为css文件
.pipe(less())
//压缩css代码
.pipe(csso())
.pipe(gulp.dest('./dist/css'));
done();
});
es6->es5语法、js代码压缩
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
gulp.task('js-min',(done)=>{
gulp.src('./src/js/*')
.pipe(babel({
//判断当前代码的运行环境,会将当前代码转为当前运行环境下的代码语法
presets: ['@babel/env']
}))
.pipe(uglify())
.pipe(gulp.dest('./dist/js'));
done();
});
任务汇总
//顺序执行任务
gulp.task('default',gulp.series('js-min','copy','css-min','htmlmin',(done)=>{
done();
}));