node文档(在 ES 模块(Node.js)中导入 JSON 文件)

本文目录
在 ES 模块(Node.js)中导入 JSON 文件
Node.js 文档建议使用 fs 模块并自己完成读取文件和解析的工作。
这种方法比起我们接下来用的第二种方法更容易理解。
我们还可以使用 createRequire 加载 JSON 文件。
createRequire 允许您构造 CommonJS require 方法,以便可以使用典型的 CommonJS 功能,例如在 Node.js 中读取 JSON ES 模块。
前两种的区别:
JSON 模块已经存在于 Chrome 91,它看起来就像一个 ES Modules 风格的导入,只是你在最后设置了类型。
当 Chrome 中有解决方案时,它很快就会在 Node.js 中发布。
如何使用nodejs分离html文件里的js和css(代码示例)
本篇文章给大家带来的内容是关于如何使用nodejs分离html文件里的js和css(代码示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
摘要: 本文要实现的内容,使用nodejs 对文件的增删改查,演示的例子-》分离出一个html 文件里面的script 和style 里面的内容,然后单独生成js文件和css 文件。中间处理异步的api-》async/await , Promise
项目托管:extract-js-css , 欢迎star
直接上代码:
// extract-js-css
// import fs from ’fs’
var fs = require(’fs’)
// import csscomb from ’csscomb’
// var csscomb = require(’csscomb’)
// var comb = new csscomb(’zen’);
// console.log(comb)
// 删除文件
const deleteFile = (path)=》{
return new Promise(resolve =》 {
fs.unlink(path, (err) =》 {
if (err) {
console.log(err)
return
};
console.log(`已成功删除 ${path}文件`);
resolve()
});
})
}
// 删除文件夹
const deleteDir = async (path)=》{
let _files = await new Promise (resolve =》 {
fs.readdir(path, (err,files) =》 {
if (err) {
console.log(err)
};
console.log(`已成功读取 ${path} 文件夹`);
resolve(files)
})
})
if(_files && _files.length) {
for(let i =0;i《_files.length;i++) {
// console.log(_files,’innnnnn’)
await deleteFile(’./test/’+ _files)
}
}
// console.log(’delete hou’)
await new Promise(resolve =》 {
fs.rmdir(path, (err) =》 {
if (err) {
console.log(err)
};
console.log(`已成功删除空 ${path}文件夹`);
resolve()
})
});
}
const emptyDir = (path) =》 {
return new Promise(resolve =》 {
fs.rmdir(path, (err) =》 {
if (err) {
console.log(err)
};
console.log(`已成功删除空 ${path}文件夹`);
resolve()
})
})
}
// 新建文件夹
/**
*
*/
const mkdirTest = ()=》{
return new Promise(resolve =》 {
fs.mkdir(’./test’, { recursive: true }, (err, data)=》{
if (err) {
console.log(err)
};
console.log(’新建文件夹成功’)
resolve()
})
})
}
// 读取html 内容
/**
*
*/
const readHtml = ()=》{
return new Promise(resolve =》 {
fs.readFile(’./test.html’, ’utf-8’, (err, data)=》{
if(err) {
throw Error(err)
}
console.log(’test.html 读取成功!--NO1’)
resolve(data)
})
})
}
// 写入css 和js
/**
* 向文件中追加内容
* @param {是文件名字} path
* @param {写入文件的内容} data
* @param {文件类型} type
* @author erlinger
* @time
*/
const appendFile = (path, data, type) =》 {
return new Promise(resolve =》 {
fs.appendFile(path, data, (err) =》 {
if (err) {
console.log(err)
};
console.log(`${type}数据已追加到文件`);
resolve()
});
})
}
// 写一个html
const writeHtml = (path, data) =》 {
return new Promise(resolve =》 {
fs.writeFile(path, data, (err) =》{
if(err) {
console.log(’err’, err)
return
}
console.log(`${path} 写入成功,功能结束!`);
resolve() // 必须resolve 。不然 promise 就到此为止,调用该方法后面的代码将不执行
})
})
}
// 插件 方法入口
(async ()=》{
console.log(’==========================game-start=============================’);
await deleteDir(’./test’);
console.log(’我应该是等---删除文件夹后---才出现’)
await mkdirTest();
console.log(’我应该是在---文件夹新建成功---后出现!’);
let cssReg = /《style》*?《\/style》/ig;
let jsReg = /《script》*?《\/script》/ig;
let allStyleReg = /《\/style》*?《style》/ig;
let allScriptReg = /《\/script》*?《script》/ig;
let cssLink = ’《link rel="stylesheet" href="./test.css"》’;
let jsrc = ’《script src="./test.js"》《/script》’;
let styleCollection, scriptColletion;
let cssContent = ’’, jsContent = ’’, htmlContentStr = ’’;
let originContent = await readHtml();
styleCollection = originContent.match(cssReg);
scriptColletion = originContent.match(jsReg);
// 处理 css
for (let i =0;i《styleCollection.length;i++) {
cssContent += JSON.stringify(styleCollection);
}
cssContent = cssContent.replace(/《style》/g,’’).replace(/《\/style》/g, ’’).replace(/("")/g,’’)
for (let i =0;i《scriptColletion.length;i++) {
jsContent += JSON.stringify(scriptColletion);
}
jsContent = jsContent.replace(/《script》/g,’’).replace(/《\/script》/g, ’’)
.replace(/《\/script》"*《script》/g, ’’).replace(/("")/g,’’)
await appendFile(’./test/test.css’, JSON.parse(cssContent), ’css’);
console.log(’我应该是在---css写入成功---后出现!’);
await appendFile(’./test/test.js’, JSON.parse(jsContent), ’js’);
console.log(’我应该是在---js写入成功---后出现!’);
htmlContentStr = originContent
.replace(allStyleReg, ’’)
.replace(cssReg, cssLink)
.replace(allScriptReg, ’’)
.replace(jsReg, jsrc);
console.log(’copyTest.html 文本已经格式化,准备写入’);
await writeHtml(’./test/copyTest.html’, htmlContentStr);
console.log(’==========================game-over=============================’);
})()代码确实没什么好解释的,慢慢看就明白了。运行:
node extract-js-css如果你要使用 es6 module,用 import 导入方法,需要单独装一个babel,使用这个包去编译成es5,在运行,具体使用可以down项目运行一下。
针对此项目,需要提醒说明以下:
对文件的处理都是异步操作,如果是单一的一个异步操作方法(比如:appendFile 方法),它就是往文件里面异步添加内容,直接封装成一个promise,然后 return 出来就好。
如果一个操作里面包含多个异步处理逻辑的就需要在这个方法里面,用async 声明方法,用await 等待异步操作,最后return 出去一个promise
在执行主流程中,我们用async声明的方法进行调用(我这里是匿名函数直接调用) ,用await 进行等待异步操作,这样我们的主流程就是一个同步的执行的流程,看起来很爽朗。
文中的异步操作文件的api 方法是异步的,nodejs 开发文档提供了同步操作文档,大家可以直接使用同步的api。我这里主要是联系在异步操作的过程中,使用async/ await promise 方法,更好的掌握它。
文中的一个demo 提供了处理多个异步、一个异步操作里面包含多个异步操作,包括在循环里执行异步操作 的一个方案,里面具体针对HTML 文件的字符串处理,比较搓搓,在用正则匹配和字符串格式化和解析字符串的情况比较单一。在读取完文件内容后,需要 JSON.stringify,后来在填入文件中的时候要 JSON.parse , 目前没找到合适的方法,如果有大佬有合适的方法,欢迎告知与我,大家一起交流。
下面是 执行一个主 async方法的一个过程
使用node如何实现重命名文件函数
这篇文章主要给大家介绍了关于利用node实现一个批量重命名文件的函数的相关资料,文中通过示例示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面一起学习学习吧。
前言
最近在吃午饭的时候突然想起来在新大上JS课程时,老师讲node的时候提了一句说node可以批量重命名文件,我就想着看看能不能实现这个功能。
看了node的官方文档,查到fs模块有一个readdir的API,它读取一个目录的内容,测试了一下,返回的结果是一个数组,元素就是文件夹的名字。详细的介绍可以参考这里://www.gxlcms.com/article/58609.htm
还有一个API,rename听名字就是重命名相关的。详细的可以参考这里://www.gxlcms.com/article/58548.htm
实现思路
整理了一下思路很简单,就是先把原文件的文件名读取出来放入一个数组,再把新名字作为一个数组,用renameAPI实现,但是批量重命名的名字只能遵循数字 +1 的规律,写了如下函数
示例代码
//rename.js
const fs = require(’fs’) //引入node内置的文件系统
function rename() {
let newName =
fs.readdir(’./file/’, (err, oldName) =》 { //读取file文件夹下的文件的名字,oldName是一个数组
if (err) {
console.log(err)
}
for (let i = 0; i 《 oldName.length; i++) {
let name = `new${i}.jpg` // 以图片为例
newName = name // 把名字赋给一个新的数组
}
for (var i = 0; i 《 oldName.length; i++) {
let oldPath = `./file/${oldName}` //原本的路径
let newPath = `./file/${newName}` //新路径
fs.rename(oldPath, newPath, (err) =》 { //重命名
if (err) {
console.log(err)
}
console.log(’done!’)
})
}
})
}
rename()文件目录
file文件夹下放置要重命名的文件
打开终端,cd到rename文件夹下,执行node rename.js即可
这只是一个简单的实现,还是有很多不足,有更好的方法,欢迎讨论
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
在js中如何实现移动端手指滑动轮播图
在vue中如何实现父组件向子组件传递数据
在wordpress中如何使用ajax
在jq.ajax+php+mysql中如何实现关键字模糊查询
在Vue中如何实现动态修改页面title

更多文章:
machome论坛(macbook里如何实现home和end键的功能)
2025年11月14日 17:00
agreeswith什么意思(agree with和agree on有何区别)
2026年7月29日 16:45
java正则表达式首字母大写(java 字符串中判断字母大小写方法)
2025年12月18日 07:15
为什么编程入门要学c语言(做安卓APP开发,为什么还要学C语言)
2025年9月14日 17:30
tcp是因特网中的什么协议(因特网最基本的通信协议 因特网最基本的通信协议是(协议)
2026年4月4日 18:15
myeclipse安装步骤破解版(怎么简单高效破解MyEclipse10,获取注册码)
2025年10月2日 14:15
c语言程序设计张其文教材(准大一,零基础自学C语言,有什么简单易懂的自学书籍和课程推荐吗)
2025年10月14日 13:00
mysql要多大空间(Wordpress建站空间要多大的Mysql空间才够)
2025年6月27日 23:30
bigdecimal除以100(一个84位的数字把存进了两个long long变量里,那么这样表示的两个84位数字,如何做除法)
2025年6月14日 14:45
js效果在浏览器上显示不出来(为什么360浏览器打开javascript插件时,看不到JS的效果,而IE和火狐浏览器可以)
2026年5月5日 17:45
html标签分为单标签和双标签(html中的 单标记和双标记怎么区分啊)
2025年5月31日 14:15
react耐克第一代(耐克 air force1 react与naike air force reactGS的区别)
2025年7月1日 21:15














