一、node入门
(一)、 首先我们需要下载安装
1.说实话就是一个代码的运行环境,我们下载是下载稳定版LTS后缀 下载完之后就一顿安装就完事
(二)、 明确一点,还有简单的运行
我们的ECMAScript依然是万物的核心,node的组成就是ESCA 还有Node模块
所有的语法都是js的,
node执行方式:在同级的文件夹下node XXX.JS就能运行了
(三)、 Nodejs模块花开发
’模块化开发‘是一种软件开发方式
-
js有弊端,文件与文件依赖不明确.命名冲突导致代码覆盖
-
使用模块化开发方式就可以解决这个问题
- nodejs开发的模块开发规范
nodejs中 一个js就是一个模块
默认不会导入模块内的东西
我们使用exports可以到处当前模块里的东西(变量啊 )
我们在另一个文件我们需要使用的话就用require就行了
核心:exports对象里面就保存了你先要到处的属性(函数也是属性本质上来说)
在另一个模块里 requerti就是返回以恶express对象,这样我们模块之间就能实现通信了
示例代码
a模块
const add = (n1, n2) => n1 + n2;
exports.add = add; //这个的意思就是到出
b模块
//const a = require('./03.module-a.js');
//这个是可以去掉js的
const a = require('./03.module-a'); //它是由返回值的,值= 穷啊hi前模块中的experson对象
console.log(a);
console.log(a.add(10, 20));
除了exports还有什么样的方式导出呢?
1.exprots
2.方式
module.exports.version = version;
module.exports.sayHi = syHi;
exports对象还有moudle.exports
这两个都是一个对象地址的引用
注意: 当exports对象和moudle.exports对象指向的不是同一个对象时 以module.exports为准
我们的导入操作依然没有变化:require('./04.module.exports.js'); 注意这个js后缀可以去掉,这里导入是相对路径
代码举例:
const greeting = name => `hello ${name}`;
const x = 100;
exports.x = x;
module.exports.greeting = greeting;
// 当exports对象和moudle.exports对象指向的不是同一个对象时 以module.exports为准
module.exports = {
name: 'zhangsan'
}
// 这样的话 你这样的写就错了我们不以这个为准我们以exports为准
exports = {
age: 20
}
(四)、 Node的一些重要的系统模块
- 文件模块fs
功能:
1.读取文件的模块
2.写入文件
3.创建文件夹
- 使用举例:读取文件
代码规范: fs.redFile('路径(注意)',[文件编码],callback)//文件编码是可选项
// 1.通过模块的名字fs对模块进行引用
// 模块的名字是很重要的, 因为在node中, 一些系统的api是也要遵循node引入规范的
const fs = require('fs');
//这样你就拿到了,一个可以处理文件的fs对象了 这个对象就可以处理各种各样的文件
// 2.通过模块内部的readFile读取文件内容
//代码实例:fs.redFile('路径(注意)',[文件编码],callback)
// 这个[]表示这个参数是可选的
fs.readFile('./01.helloworld.js', 'utf8', (err, data) => {
// 如果文件读取出错err 是一个对象 包含错误信息
// 如果文件读取正确 err是 null
// doc 是文件读取的结果
console.log(err);
console.log(data);
});
- 使用举例:写入文件(通常是用来收集错误日志)
代码规范: fs.writeFile('写入到哪儿去(是一个包含文件的路径名)','即将写入的内容',callback)
const fs = require('fs');
//1.由于你这个fs.writeFile是一个耗时的操作,故而不能拿变量去接受
//重要如过demo,txt不存在 我们就自动创建一个
fs.writeFile('./demo.txt', '即将要写入的内容', err => {
if (err != null) {
console.log(err);
return;
}
console.log('文件内容写入成功');
// 第三个callback还是非常重要的
})
- 系统模块path
为什么有这个?因为我们得服务器可能再window还有linux下运行,而我们的linux的路径符号是不一样的,为了解决这个东西于是乎这个东西就诞生了
path不是一个耗时操作 我们可以直接拿到返回值,这个返回值就是拼接好的路径字符串
1.语法
path.join('路径','路径','....')
2.代码实例
path不是一个耗时操作 我们可以直接拿到返回值,这个返回值就是拼接好的路径字符串
const path = require('path'); //引入!!引入!
const finalPath = path.join('public', 'uploads', 'avatar');
这个返回值会自动根据系统的不同 ,变成不同的路径出来
相对路径是有问题的:它相对的是当前的命令行窗口
注意,在大多数Node服务器开发我们一般都是做成绝对路径
3.获取当前文件的绝对路径的一个属性
__dirname这个属性里面就保存了当前js文件所在的绝对路径
const fs = require('fs');
const path = require('path');
console.log( __dirname);
console.log(path.join(__dirname, '01.helloworld.js'))
fs.readFile(path.join(__dirname, '01.helloworld.js'), 'utf8', (err, doc) => {
console.log(err)
console.log(doc)
});
(五)、 常见的第三方模块
所谓的第三方模块都是别人做好的’轮子‘。他们都在一个文件夹里面
第三方的模块存在的形式
1.以js文件存在,里面对外暴露了一些API接口 ,通过这个接口你就可以很方便的搞到它里面的功能
2.命令行功能的形式存在,什么意思呢?就是这种模块的使用 ,是通过命令行输入命令实现的,这也是大多是CLI脚手架的实现方式
- 获取第三方模块
我们在npm上存储还有发布模块,只要你想 你也就可以发布,这个npm有一个网站,有兴趣你可以去看看
npm全称 'node pack mannerge'
在node安装的时候 npm工具已经 附在其中了,
使用的方式:npm install XXX 这个XX就是你想要的模块名字
1.使用举例
- 安装 formidable包
npm install formidable,敲击回车就完事,默认的下载到的地址就是当前的文件夹目录 ,里面有一个node_modules文件夹,这些包都会下载到这个文件夹里面
同时我们还有package-lock.json文件 这里面记录了当前项目所用的所有的包信息,
在你移值或者发生项目给别人的时候 你不必发生整个项目,你可以不发送node_modules文件夹,上传到git也是一样 ,一般是不上传这个文件夹。
我们根据package-lock.json就可以完成node_modules里面的所有依赖包的安装
命令:npm install
-
卸载 formidable
npm uninstall formidable -
全局安装
安装有两种一种是:本地安装,一种是全局安装
所谓的全局就是安装一起 全局都可以用 ,每一个项目都可以用
对应的本地安装就是仅限当前项目使用 -
安装一个重要的全局的包 nodemon
这个东西 ,是提供自动刷新的功能,只要文件有改动它就会自动更新
使用nodemon举例:
命令行下:nodemon XXX.JS ,此时命名就挂起了;这样只要XXX.js文件发生改动 ,控制台就会自动的刷新控制台,
全局安装nodemon
npm install nodemon -g
-
如何断开这个挂起的操作?ctrl+c就可以了
-
再来一个包nrm
作用 改变下载的网站,原生的npm在国外下载,在国内我们需要换一个下载地址,这个nrm就是来干这个事的
安装
npm install nrm -g
查询可用的国内下载地址nrm ls
切换npm下载地址 nrm user
nrm user taobao回车就完事
- 安装一下gulp
还是一样的操作流程
npm install gulp
注意我们不要-g 因为我们的gulp是库文件的形式安装,只在当前项目下能使用
讲一下这个gulp是什么:这是基于node的前端构建工具
什么是构建工具呢?
意思就是你可以拿这个东西去做一些重复性的工作,比如
压缩html js css代码
es6语法的转换(转化为es5)
less转css
抽取公共文件部分
游览器的自动刷新...我们还有好多的骚操作,这点的内容我们将会在下一讲给大家讲解: