目录
前言
开篇语
准备工作
ES6导入导出
导入
有名导出
匿名导出
Node概念
Node导入导出
导入
有名导出
匿名导出
Node常用模块
path模块
和路径有关的全局变量
常见方法
导入方法
fs模块
常见方法
导入方法
结束语
前言
开篇语
本系列博客主要分享JavaScript的进阶语法知识,当前为Node.js部分第一期。
本期内容为:ES6导入导出,Node的概念、导入导出以及常见模块。
与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化,因此,在之后使用原生JS时,我们应该尽量使用ES6的语法进行代码编写。
准备工作
软件:【参考版本】Visual Studio Code
插件(扩展包):Open in browser, Live Preview, Live Server, Tencent Cloud AI Code Assistant, htmltagwrap
提示:在不熟练的阶段建议关闭AI助手
系统版本: Win10/11/其他非Windows版本
提示:node.js在当前文件夹下使用cmd运行,不在浏览器解析运行
ES6导入导出
导入
导入是指,将方法或变量从另一个js文件中以对象的形式引入当前文件。
之前,我们知道引入一个js文件是利用script标签的地址来做的,就像下面这样——
<script src='./js/jquery.min.js'></script>
如果我们需要将需要的变量导入一个js文件,就不能使用这种方式了。
ES6为我们提供了有名导出和匿名导出两种方式——
有名导出
对于有名导出而言,在被导出的文件中,我们找到需要导出的变量或方法,并使用export修饰。
export const name = "xxxx"
export const fn = () => {
console.log("#############");
}
然后,在导入的文件中,使用下面的语法来导入我们需要的内容——
import * as 别名 from "被导入js的路径"
其中*代表全部导出,也可以使用{变量1, 方法1, ……} 这样的形式,仅导出我们需要的内容,这种情况下不需要这个别名。
这里的别名是任意的,它是一个对象,封装了我们导出的变量、方法等。因此,想要使用导入的内容,我们需要使用该对象名称来调用(第二种导入方式直接使用导入的名称即可)。
// 方式一
import * as obj from "./js/a.js"
console.log(obj.name);
obj.fn()
// 方式二
import {name,fn} from "./js/a.js"
console.log(name);
fn()
匿名导出
匿名导出的变量或方法没有名称,使用下面的格式导出——
export default 导出的变量值或匿名方法
如果使用匿名导出的方式,则至多只能有一个匿名导出。
在导入时,为匿名导出的内容重新设定一个名字,就像下面这样——
import myname from "./js/b.js"
console.log(myname);
Node概念
Node.js是一个基于Chrome V8引擎的JavaScript环境。
浏览器是JS运行的前端环境,而Node.js是JS运行的后端环境。
通常来说,在控制台使用Node + JS文件名运行使用Node语法的JS文件,此处的文件名可以省略.js后缀。
注意,Node.js无法调用DOM和BOM元素,因为无法获取到document和window,如果在代码中出现了这两个节点,将会提示未定义的错误。
Node导入导出
导入
Node使用require进行导入,参数为导入的js库或文件。
require("./js/c")
由于Node导入的内容均为js文件,所以可以省略.js后缀。
导入的文件将会立刻执行,具有缓存。如果重复导入多次,则只执行一次。
有名导出
Node使用exports.名字的方式来进行有名导出,就像下面这样——
exports.name = "####"
exports.fn = () => {
console.log("我是一个函数..");
}
require()返回一个对象,该对象具有导出的全部内容,因此直接使用一个变量来接导出内容即可。
const obj = require("./js/d")
或者使用一个对象,来接具体需要导出的内容,此时就不需要使用对象名.xxx这样的形式调用了。
const {name,fn} = require("./js/d")
导出内容的使用方式同ES6。
匿名导出
Node使用module.exports = 导出内容的方式来进行匿名导出,就像下面这样——
module.exports = {
name:"小明",
say() {
console.log("xxxx在说话....");
}
}
同样的,module.exports也只能有一个,否则只保留最后一次匿名导出的内容。
使用方式和有名导出相同。
Node常用模块
path模块
和路径有关的全局变量
Node有两个和路径相关的常用的全局变量——
变量名 | 含义 |
---|---|
__dirname | 当前文件的父文件夹的绝对路径 |
__filename | 当前文件的绝对路径 |
常见方法
path常用的方法有下面五种——
方法和参数 | 作用 |
---|---|
path.basename(yourpath[, suffix]) | 获取文件名称,如a.txt |
path.dirname(yourpath) | 获取文件的父级目录 |
path.extname(yourpath) | 获取文件的后缀名(类型,如.txt) |
path.resolve([...paths]) | 路径拼接操作 |
path.normalize(path) | 路径矫正操作 |
这里的yourpath为__filename。
注意,如果使用base(yourpath, 文件后缀名),可以返回没有后缀名的文件名。
对于resolve(),我们常用它来获取同一父级下其他文件,比如:
const url = resolve(__dirname,"js","a.js")
对于normalize(),如果路径中有多余的 / 或 \,将自动被去除。
导入方法
我们可以使用require一次性导入上述的方法——
const {basename,dirname,extname,resolve,normalize} = require("path")
不要忘记导入拼接路径的方法——
const { resolve } = require("path")
fs模块
常见方法
fs模块用于文件的读写操作,常见的方法有下面这些——
方法和参数 | 作用 |
---|---|
writeFile(yourpath, data) | 覆盖写(异步),覆盖上一次写入的内容 |
writeFileSync() | 覆盖写(同步) |
appendFile(yourpath, data) | 追加写(异步),在上一次写入的内容后写入 可以使用\r\n为新写入的内容添加换行 |
appendFileSync() | 追加写(同步) |
readFileSync(yourpath, charset) | 读取(同步) |
existsSync(yourpath) | 判断文件是否存在(同步) |
unlinkSync(yourpath) | 删除文件 |
我们常将writeFile(),appendFile()和readFileSync()放在try-catch语句中,并在catch语句中捕获错误err。
导入方法
我们可以使用require一次性导入上述的方法——
const { writeFile, writeFileSync, appendFile, appendFileSync,
readFile, readFileSync, existsSync, unlinkSync } = require("fs")
结束语
本期内容到此结束。关于本系列的其他博客,可以查看我的JS进阶专栏。
在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。
文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。
==期待与你在下一期博客中再次相遇==
——临期的【H2O2】