Node.js-发布包
一,发布包 - 初始化基础的包结构
概念:
什么是 “包结构”?
一个可发布的 Node.js 包至少需要两个关键文件:
package.json:包的 “身份证”,记录包名、版本、入口文件等信息(必须有)。- 业务代码文件:比如
index.js,存放你写的功能(比如格式化时间、转义 HTML 等)。
练习:
- 新建一个文件夹(比如叫my-utils-package,作为你的包目录),打开终端进入该文件夹。
- 执行
npm init命令,按提示填写信息(不懂的直接回车用默认值),会自动生成package.json。 - 在my-utils-package文件夹中新建
index.js(作为入口文件,暂时空着,后面会写内容)
此时你的包结构:
my-utils/
├─ package.json // 包的配置信息
└─ index.js // 功能代码入口
二,发布包 - 格式化时间 & main 属性
概念:
核心目标:实现一个 “格式化时间” 的功能,并通过main属性指定包的入口文件。
什么是main属性?
package.json中的main字段用来告诉 Node.js:“当别人通过require('你的包名')导入时,应该加载哪个文件”。默认是index.js,一般不用改,但要确保这个文件存在。
练习:实现格式化时间功能
首先:在index.js中写一个格式化时间的函数,比如把Date对象转成YYYY-MM-DD HH:MM:SS格式。
function formatTime(date = new Date())
{
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2,'0');
const day = String(date.getDate()).padStart(2,'0');
const hours = String(date.getHours()).padStart(2,'0');
const minutes = String(date.getMinutes()).padStart(2,'0');
const seconds = String(date.getSeconds()).padStart(2,'0');
return `${year}-${month}-${day}-${hours}:${minutes}:${seconds}`;
}
module.exports = {
formatTime,
};
然后:测试功能是否可用-在my-utils-package文件夹外新建一个test.js,测试你的包:
const myUtils = require('./my-utils-package');
console.log(myUtils.formatTime());
const testDate = new Date(2020,0,13);
console.log(myUtils.formatTime(testDate))
最后:终端执行node test.js
三, 发布包 - 转义 & 还原 HTML 的方法
概念:
核心目标:实现 “HTML 转义” 和 “HTML 还原” 功能(防止 XSS 攻击,比如把<script>转成<script>)。
为什么需要转义 HTML?
如果用户输入包含<script>等标签,直接显示在网页上可能被执行恶意代码(XSS 攻击)。转义后能把特殊字符变成安全的字符串(比如<→<,>→>)。
练习:实现 HTML 转义和还原
// index.js(接上面的代码继续写)
/**
* HTML转义(把特殊字符转成实体)
* @param {string} str - 要转义的字符串
* @returns {string} 转义后的字符串
*/
function escapeHtml(str) {
// 用对象存储“原字符→转义后”的映射关系
const map = {
'<': '<',
'>': '>',
'&': '&',
'"': '"',
"'": '''
};
// 用正则匹配所有需要转义的字符,替换成映射后的值
return str.replace(/[<>&"']/g, (match) => map[match]);
}
/**
* HTML还原(把实体转回特殊字符)
* @param {string} str - 要还原的字符串
* @returns {string} 还原后的字符串
*/
function unescapeHtml(str) {
const map = {
'<': '<',
'>': '>',
'&': '&',
'"': '"',
''': "'"
};
// 用正则匹配所有实体,替换成原字符
return str.replace(/<|>|&|"|'/g, (match) => map[match]);
}
// 导出新增的函数(注意:之前的formatTime也要保留)
module.exports = {
formatTime,
escapeHtml,
unescapeHtml
};
测试转义功能
更新test.js,添加测试代码:
javascript
运行
// test.js(补充)
// 测试HTML转义
const unsafeStr = '<script>alert("xss")</script>';
const safeStr = myUtils.escapeHtml(unsafeStr);
console.log('转义后:', safeStr); // 输出 <script>alert("xss")</script>
// 测试HTML还原
const originalStr = myUtils.unescapeHtml(safeStr);
console.log('还原后:', originalStr); // 输出 <script>alert("xss")</script>
执行node test.js,查看转义和还原是否正确。
更多推荐


所有评论(0)