定义
- 定义:Node.js 是一个跨平台的 JavaScript 运行环境,使开发者可以搭建服务器端的 JavaScript 应用程序
- 作用:使用 Node.js 编写服务器端程序
- 编写数据接口,提供网页资源浏览功能等等
- 前端工程化
- 能够执行JS代码的原因:首先,浏览器能执行JS代码,依靠的是内核中的V8引擎(C++程序)。其次,Node.js是基于Chrome V8引擎进行封装(运行环境)。区别,都支持ECMAScript标准语法,Node.js 有独立的API
Node.js 环境没有DOM和BOM等
- 在Node.js环境中运行js代码
在终端中输入:node xxx.js 回车即可执行(注意路径)
前端工程化
前端工程化:开发项目直到上线,过程中集成的所有工具和技术
Node.js 是前端工程化的基础(因为 Node.js 可以主动读取前端代码内容)
fs 模块 - 读写文件
- 模块:类似插件,封装了方法/属性
- fs模块:封装了与本机文件系统进行交互的方法和属性
- 语法:
1
| const fs = require('fs')
|
1 2 3
| fs.writeFile('文件路径', '写入内容', err => { })
|
1 2 3 4
| fs.readFile('文件路径', (err, data) => { })
|
path 模块 - 路径处理
- 建议:在Node.js代码中,使用绝对路径
- 补充:__dirname 内置变量(获取当前模块路径-绝对路径)
- 注意:path.join()会使用特定于平台的分隔符,作为定界符,讲多有给定的路径片段连接在一起
- 语法
1
| const path = require('path')
|
1
| path.join('路径1', '路径2', ...)
|
http 模块 - 创建web服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const http = require('http') const server = http.createServer()
server.on('request', (req,res) => { res.setHeader('Content-Type', 'text/plain;charset-utf-8') res.end('您好,欢迎使用node.js创建的 web 服务') })
server.listen(3000, () => { console.log('web 服务已经启动') })
|
模块化
定义
- 定义:CommonJs 模块是Node.js 打包 JavaScript代码的原始方式,Node.js 还支持浏览器和其他 JavaScript 运行时使用的 ECMAScript 模块标准。在Node.js中,每个文件都被视为一个单独的模块
- 概念:项目是由很多个模块文件组成的
- 优点:提高代码复用性,按需加载,独立作用域
CommonJs 标准
- 使用
1 2 3 4 5 6 7
| const baseURL = 'http://hmajax.itheima.net' const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
module.exports = { url: baseURL, ArraySum: getArraySum }
|
1 2
| const obj = require('./utils') console.log(obj.ArraySum([1, 2, 3]))
|
- 模块名或路径
- 内置模块:直接写名字(例如:fs,path,http)
- 自定义模块:写模块文件路径(例如:./utils.js)
ECMAScript 标准 - 默认导出和导入
- 默认标准使用
1 2 3 4 5 6 7
| const baseURL = 'http://hmajax.itheima.net' const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
export default { baseURL, getArraySum }
|
- 导入:import 变量名 from ‘模块名或路径’
1 2
| import obj from './utils.js' console.log(obj.getArraySum([1, 2, 3]))
|
注意:Node.js 默认支持 CommonJs 标准语法,如需使用ECMAScript 标准语法,在运行模块所在文件夹新建 package.json 文件,并设置{“type”:”module”}
ECMAScript 标准 - 命名导出和导入
- 命名标准使用
1 2
| export const baseURL = 'http://hmajax.itheima.net' export const getArraySum = (arr = []) => arr.reduce((sum, item) => sum += item, 0)
|
- 导入:import {同名变量} from ‘模块名或路径’
1 2 3 4 5
| import {baseURL, getArraySum} from './utils.js'
console.log(baseURL) const result = getArraySum([1, 2, 3]) console.log(result)
|
- 如何选择
- 按需加载,使用命名导出和导入
- 全部加载,使用默认导出和导入
包
- 定义:将模块,代码,其他资料聚合成一个文件夹
- 分类
- 项目包:主要用于编写项目和业务逻辑
- 软件包:封装工具和方法进行使用
- 要求:根目录中必须有package.json文件(记录包的清单信息)
1 2 3 4 5 6 7 8
| { "name": "cz_utils", 软件包名称 "version": "1.0.0", 软件包当前版本 "description":“一个数组和字符串常用工具方法的包”, 软件包简短描述 "main": "index. js", 软件包入口点 "author":"itheima", 软件包作者 "license": "MIT" 软件包许可证(商用后可以用作者名字宣传) }
|
注意:导入软件包时,引入的默认是index.js模块文件/main 属性指定的模块文件
npm - 软件包管理器
- 定义:npm 是 Node.js 标准的软件包管理器
- 使用
- 初始化清单列表:npm init -y (得到package.json文件,有则略过此命令)
- 下载软件包:npm i 软件包名称
- 使用软件包:导入该软件包即可使用
- 安装该项目的所有依赖
一般从网上拷贝的项目中只有package.json 缺少 node.modules 时使用 npm i 即可根据 package.json 记录的素有包和版本开始下载
- 软件包的分类
- 本地软件包:当前项目内使用,封装属性和方法,存在于node_modules
- 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置
nodemon
- nodemon作用:替代node命令,检测代码更改,自动重启程序
- 使用
- 安装:npm i nodemon -g (-g代表安装到全局环境中)
- 运行:nodemon待执行的目标js文件
版权声明: 此文章版权归霜屿清所有,如有转载,请注明来自原作者