当前位置 : 首页 » 文章分类 :  开发  »  NPM-Package

NPM-Package

NPM/Node 常用软件包


npm-pack-all 打离线安装包

https://www.npmjs.com/package/npm-pack-all

npm-pack-all 是一个用于将 Node.js 项目的依赖项打包成 .tgz 文件的工具,其核心功能是将项目中的生产依赖(dependencies)和开发依赖(devDependencies)递归打包,便于离线分发或部署。

全局安装 npm-pack-all
npm install -g npm-pack-all

使用场景

  • 离线环境部署:在无网络连接的环境中,通过 .tgz 文件安装依赖(npm install artifact.tgz)。
  • 私有库/组件分发:将团队内部私有库打包后分发给成员,确保版本一致性。

npm-pack-all 与 npm pack 的区别:

  • npm pack 仅打包当前目录的模块(如项目自身代码),不处理依赖项。
  • npm-pack-all 递归打包所有依赖项,生成包含完整依赖树的 .tgz 文件。

npm-check-updates

npm-check-updates
https://www.npmjs.com/package/npm-check-updates

npm-check-updates(NCU) 更新 package.json 中的依赖到最新版本,忽略指定的版本号。

全局安装 npm-check-updates

npm install -g npm-check-updates

ncu 检测版本更新

进入 package.json 所在目录,执行 ncu 检查 package.json 中依赖的可用版本更新
这里以 hexo 为例:

# ncu
Checking /home/centos/git/hexo/package.json
[====================] 12/12 100%

 hexo                     ^3.9.0  →  ^5.4.0
 hexo-deployer-git        ^0.1.0  →  ^3.0.0
 hexo-generator-archive   ^0.1.4  →  ^1.0.0
 hexo-generator-category  ^0.1.3  →  ^1.0.0
 hexo-generator-index     ^0.2.0  →  ^2.0.0
 hexo-generator-tag       ^0.2.0  →  ^1.0.0
 hexo-renderer-ejs        ^0.2.0  →  ^1.0.0
 hexo-renderer-marked     ^1.0.1  →  ^4.0.0
 hexo-renderer-stylus     ^0.3.1  →  ^2.0.1
 hexo-server              ^0.2.0  →  ^2.0.0
 hexo-tag-bootstrap        0.0.8  →   0.2.1
 hexo-wordcount           ^2.0.1  →  ^6.0.1

Run ncu -u to upgrade package.json

ncu -u 更新package.json

进入 package.json 所在目录,执行 ncu -u 可以更新 package.json 中的依赖版本到最新。
之后再执行 npm install 根据 package.json 中的版本号更新依赖包。

注意:ncu -u 只是更新 package.json 文件中的版本号,并不是真的安装依赖包的新版本,之后还需执行 npm install 来安装更新。

ncu -g 检查全局包更新


elasticdump

https://www.npmjs.com/package/elasticdump


serve HTTP 服务器

https://www.npmjs.com/package/serve

serve 一个​​极简、零配置的静态 HTTP 服务器​​,专门用于在本地开发和测试环境(甚至简单的演示环境)中快速地托管静态网站(HTML, CSS, JS, 图片等)或单页应用程序(SPA)。

核心目的:​​ 取代配置复杂的 Web 服务器(如 Apache 或 Nginx 进行本地开发设置),让你一键启动一个本地服务器来预览你的静态文件或构建产物。

通常全局安装,方便在任意目录使用:
npm install -g serve

常用参数:
-s, --single 将所有不存在的 URL 重写为指定的文件(默认是 /index.html)
-p, --port, -l, --listen 指定端口

serve 启动服务器(托管当前目录),默认端口是 3000(如果 3000 被占用会自动尝试其他端口)。访问 http://localhost:3000 即可

serve ./dist 指定目录启动
serve -l 8080 指定端口启动


http-server HTTP 服务器

https://www.npmjs.com/package/http-server

http-server 是一个基于 Node.js 的、零配置的命令行 HTTP 服务器。它非常适合快速搭建本地环境来测试静态网站、单页应用(SPA)或任何 HTML/CSS/JavaScript 项目。它轻量、易用,且支持许多常用功能。

全局安装 http-server

npm install -g http-server

http-server 命令会在当前目录启动 http 服务器,监听 8000 端口,打开 http://127.0.0.1:8080/ 页面,可看到:

  • 如果目录内有 index.html 文件则加载并显示 index.html 页面
  • 如果目录内没有 index.html 文件,显示目录内的文件列表,可下载文件,也就是 文件浏览器

直接执行 http-server 命令的输出:

# http-server
Starting up http-server, serving ./

http-server version: 14.1.1

http-server settings:
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none

Available on:
  http://127.0.0.1:8080
  http://172.21.202.29:8080
Hit CTRL-C to stop the server

可选参数
-p --port 指定服务器监听的端口

http-server -p 3000  # 在 3000 端口启动 http 服务器

-d 指定根目录路径(相对于命令运行位置或绝对路径)

http-server ./dist/          # 服务当前目录下的 dist 子目录
http-server /home/user/site  # 服务绝对路径目录

Puppeteer 浏览器操作

https://www.npmjs.com/package/puppeteer

npm i puppeteer


@mozilla/readability 网页正文提取

https://www.npmjs.com/package/@mozilla/readability
https://github.com/mozilla/readability

@mozilla/readability 是 Mozilla 开源的 JavaScript 库,用于从 HTML 页面中提取​​可读内容​​(如文章正文、标题等),过滤无关元素(广告、导航栏等)。
它是 Firefox 浏览器『阅读模式』的核心算法,适用于网页内容抓取和无干扰阅读场景。

特性:

  • 智能内容提取:通过分析 DOM 结构、标签密度和语义特征,识别文章主体内容
  • 噪音过滤:自动移除广告、评论区、侧边栏等非核心元素
  • 元数据解析:提取文章标题、作者、发布日期、缩略图和摘要等信息
  • 纯文本处理:支持输出格式化的 HTML 或纯文本内容
  • 轻量无依赖:纯 JavaScript 实现,无外部依赖,适用于 Node.js 和浏览器环境

安装

npm install @mozilla/readability
npm install jsdom  # 通常搭配 jsdom 使用

实用示例:

const { Readability } = require('@mozilla/readability');
const { JSDOM } = require('jsdom');

// 示例:从HTML字符串中提取内容
const html = `...`; // 输入你的HTML字符串或从文件/网络获取
const dom = new JSDOM(html);
const reader = new Readability(dom.window.document);
const article = reader.parse();

console.log(article.title);     // 文章标题
console.log(article.content);   // 文章正文(HTML格式)
console.log(article.textContent); // 纯文本内容
console.log(article.excerpt);    // 摘要
console.log(article.byline);      // 作者信息
console.log(article.siteName);    // 网站名称

https://www.npmjs.com/package/js-cookie
https://github.com/js-cookie/js-cookie

npm i js-cookie


iziToast Toast通知

https://github.com/marcelodolza/iziToast

https://marcelodolza.github.io/iziToast/

<!-- 头部 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/css/iziToast.min.css">
<!-- 页面底部 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/js/iziToast.min.js"></script>

// 默认配置
iziToast.settings({
    position: 'topRight',           // 默认显示位置:右上角
    timeout: 3000,                  // 默认显示时间:3000毫秒(3秒)
    resetOnHover: true,             // 鼠标悬停时重置计时器
    transitionIn: 'fadeInLeft',     // 进入动画:从左淡入
    transitionOut: 'fadeOutRight',  // 退出动画:向右淡出
    closeOnClick: true,             // 点击关闭
    progressBar: true,              // 显示进度条
    layout: 1,                      // 布局样式:1表示纯色背景
    theme: 'light',                 // 主题:亮色
    maxWidth: 300                   // 最大宽度:300像素
});

// 几种预置通知类型
iziToast.info({...})    // 蓝色信息通知
iziToast.success({...}) // 绿色成功通知
iziToast.warning({...}) // 橙色警告通知
iziToast.error({...})   // 红色错误通知

// 自定义通知
iziToast.show({
  title: '提示',
  message: '这是来自 iziToast 的通知!',
  position: 'topCenter',
  timeout: 3000,
  progressBar: true,
  closeOnClick: true,
  backgroundColor: '#17a2b8',
  theme: 'dark'
});

常用参数:
title: 通知标题
message: 通知内容
position: 位置 (默认 bottomRight,支持 topRight, topCenter, bottomCenter 等)
timeout: 自动关闭时间(默认 5000 毫秒)
color: 通知背景色


FingerprintJS 浏览器指纹

https://github.com/fingerprintjs/fingerprintjs

https://fingerprintjs.github.io/fingerprintjs/

本地和服务器运行生成指纹不同问题

问题:
在同一台电脑的同一个 chrome 浏览器上访问包含 fingerprintjs 计算指纹的页面,通过 本地启动服务 localhost:8000 和 部署到 Linux 服务器后通过域名 http://devgou.com/ 访问,发现计算的设备指纹不同

排查及原因:
分别打开 localhost:8000 和 http://devgou.com/ 的浏览器控制台
把 fingerprintjs 指纹计算的结果在浏览器控制台输出

const fp = await FingerprintJS.load();
const result = await fp.get();

对比 components 中各个组件的属性,发现下面这些属性在两个环境中是不同的:

audio, canvas, colorGamut, contrast, deviceMemory, domBlockers, fontPreferences, fonts, screenFrame

解决:
不要使用默认的指纹生成方法,手动排除一些不稳定的动态组件,从而保持2个环境中生成的浏览器指纹相同。

代码如下:

// 稳定指纹检测函数
const getStableFingerprint = async () => {
  try {
    // 动态加载指纹库
    const script = document.createElement('script');
    script.src = 'https://openfpcdn.io/fingerprintjs/v4/iife.min.js';
    script.crossOrigin = 'anonymous';
    
    // 等待库加载完成
    await new Promise((resolve, reject) => {
      script.onload = resolve;
      script.onerror = reject;
      document.head.appendChild(script);
    });
    
    // 初始化指纹库
    const fp = await FingerprintJS.load();
    
    // 获取指纹结果
    const result = await fp.get();
    
    // 排除不稳定组件
    const {
      audio, canvas, colorGamut, contrast, deviceMemory,
      domBlockers, fontPreferences, fonts, screenFrame,
      ...stableComponents
    } = result.components;
    
    // 生成稳定指纹
    const stableVisitorId = FingerprintJS.hashComponents(stableComponents);
    
    // 返回结果
    return {
      originalVisitorId: result.visitorId,
      stableVisitorId,
      confidence: result.confidence,
      components: Object.keys(stableComponents)
    };
    
  } catch (error) {
    console.error('指纹检测失败:', error);
    return null;
  }
};

// 执行测试并显示结果
getStableFingerprint().then(result => {
  if (result) {
    console.log('✅ 稳定指纹:', result.stableVisitorId);
    console.log('🔒 原始指纹:', result.originalVisitorId);
    console.log('📊 使用的组件:', result.components.join(', '));
    console.log('⚖️ 置信度:', result.confidence.score);
  }
});

生成指纹时排除指定组件

排除指定组件的官方示例代码
https://github.com/fingerprintjs/fingerprintjs/blob/master/docs/extending.md

// ...

const result = await fp.get()

// The `languages` and `audio` components will be excluded
const { languages, audio, ...components } = result.components

// Optionally, you can make a visitor identifier from your custom list of components
const visitorId = FingerprintJS.hashComponents(components)

上一篇 NPM-Basic

下一篇 Claude-Code

阅读
评论
2.4k
阅读预计10分钟
创建日期 2025-08-19
修改日期 2025-08-21
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论