一,发布包 - 初始化基础的包结构

概念:

什么是 “包结构”?

一个可发布的 Node.js 包至少需要两个关键文件:

  • package.json:包的 “身份证”,记录包名、版本、入口文件等信息(必须有)。
  • 业务代码文件:比如index.js,存放你写的功能(比如格式化时间、转义 HTML 等)。

练习:

  1. 新建一个文件夹(比如叫my-utils-package,作为你的包目录),打开终端进入该文件夹。
  2. 执行npm init命令,按提示填写信息(不懂的直接回车用默认值),会自动生成package.json
  3. 在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>转成&lt;script&gt;)。

为什么需要转义 HTML?

如果用户输入包含<script>等标签,直接显示在网页上可能被执行恶意代码(XSS 攻击)。转义后能把特殊字符变成安全的字符串(比如<&lt;>&gt;)。

练习:实现 HTML 转义和还原

// index.js(接上面的代码继续写)

/**
 * HTML转义(把特殊字符转成实体)
 * @param {string} str - 要转义的字符串
 * @returns {string} 转义后的字符串
 */
function escapeHtml(str) {
  // 用对象存储“原字符→转义后”的映射关系
  const map = {
    '<': '&lt;',
    '>': '&gt;',
    '&': '&amp;',
    '"': '&quot;',
    "'": '&#39;'
  };
  // 用正则匹配所有需要转义的字符,替换成映射后的值
  return str.replace(/[<>&"']/g, (match) => map[match]);
}

/**
 * HTML还原(把实体转回特殊字符)
 * @param {string} str - 要还原的字符串
 * @returns {string} 还原后的字符串
 */
function unescapeHtml(str) {
  const map = {
    '&lt;': '<',
    '&gt;': '>',
    '&amp;': '&',
    '&quot;': '"',
    '&#39;': "'"
  };
  // 用正则匹配所有实体,替换成原字符
  return str.replace(/&lt;|&gt;|&amp;|&quot;|&#39;/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); // 输出 &lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;

// 测试HTML还原
const originalStr = myUtils.unescapeHtml(safeStr);
console.log('还原后:', originalStr); // 输出 <script>alert("xss")</script>

执行node test.js,查看转义和还原是否正确。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐