Socket
Book a DemoInstallSign in
Socket

@winner-fed/build-security

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@winner-fed/build-security

安全构建工具库 - 支持文件加密、加签和过滤

latest
npmnpm
Version
0.0.4
Version published
Maintainers
1
Created
Source

@winner-fed/build-security

安全构建工具库 - 支持文件加密、加签和过滤功能

功能特性

  • ✅ 文件加密:支持对指定类型的文件进行 AES-256-CBC 加密
  • ✅ 文件加签:生成文件哈希清单并加密存储
  • ✅ 文件过滤:支持通过文件名、glob 模式或正则表达式过滤文件
  • ✅ ZIP 处理:支持直接处理 ZIP 压缩包
  • ✅ 目录处理:支持处理整个目录结构

安装

npm install @winner-fed/build-security

基本使用

简单示例

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true, // 启用加密
  sign: true // 启用加签
});

// 处理文件夹
builder
  .build('./dist', './output/dist_security.zip')
  .then((outputPath) => {
    console.log('构建完成:', outputPath);
  })
  .catch((err) => {
    console.error('构建失败:', err);
  });

使用 async/await

import { SecurityBuilder } from '@winner-fed/build-security';

async function buildSecurity() {
  const builder = new SecurityBuilder({
    encrypt: true,
    sign: false
  });

  try {
    const outputPath = await builder.build('./dist', './output/dist_encrypted.zip');
    console.log('构建完成:', outputPath);
  } catch (err) {
    console.error('构建失败:', err);
  }
}

buildSecurity();

配置选项

SecurityBuilder 构造函数选项

选项类型默认值说明
encryptbooleanfalse是否启用文件加密
signbooleanfalse是否启用文件加签
excludeFilesstring[][]需要过滤的文件列表(支持 glob 模式)
excludePatterns(string|RegExp)[][]需要过滤的文件模式(正则表达式)

build 方法参数

builder.build(entry, outputName);
  • entry (string|string[]): 输入路径,可以是:
    • 单个文件夹/ZIP 文件路径
    • 路径数组(支持多个输入)
    • Glob 模式(如 ./dist/*.zip./packages/**/dist
    • 混合使用(数组中可以包含普通路径和 glob 模式)
  • outputName (string): 输出 ZIP 文件名(可选,不指定则自动生成)

文件过滤功能

使用文件名过滤

const builder = new SecurityBuilder({
  encrypt: true,
  excludeFiles: ['config.json', 'README.md', 'package.json']
});

使用 Glob 模式过滤

const builder = new SecurityBuilder({
  encrypt: true,
  excludeFiles: [
    '**/*.test.js', // 所有测试文件
    '**/node_modules/**', // node_modules 目录
    '**/*.map', // 所有 source map 文件
    'dist/**/*.log' // dist 目录下的所有日志文件
  ]
});

使用正则表达式过滤

const builder = new SecurityBuilder({
  encrypt: true,
  excludePatterns: [
    /\.test\.js$/, // 匹配所有 .test.js 文件
    /^config/, // 匹配以 config 开头的文件
    /node_modules/, // 匹配包含 node_modules 的路径
    /\.(map|log|md)$/i // 匹配 .map、.log、.md 结尾的文件
  ]
});

组合使用多种过滤方式

const builder = new SecurityBuilder({
  encrypt: true,
  sign: true,
  excludeFiles: ['**/*.test.js', '**/node_modules/**'],
  excludePatterns: [/\.map$/, /^\./]
});

完整示例

示例 1:仅加密

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true,
  excludeFiles: ['**/*.map', '**/*.log']
});

builder.build('./dist', './output/dist_encrypted.zip').then((path) => console.log('加密完成:', path));

示例 2:仅加签

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  sign: true
});

builder.build('./dist', './output/dist_signed.zip').then((path) => console.log('加签完成:', path));

示例 3:加密 + 加签

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true,
  sign: true,
  excludeFiles: ['**/*.map', '**/*.test.js', '**/node_modules/**']
});

builder.build('./dist', './output/dist_encrypted_signed.zip').then((path) => console.log('加密加签完成:', path));

示例 4:处理 ZIP 文件

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true,
  sign: true
});

// 直接处理 ZIP 文件,会自动解压、处理、重新打包
builder.build('./input.zip', './output/processed.zip').then((path) => console.log('处理完成:', path));

示例 5:处理多个输入

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true,
  sign: true
});

// 处理多个文件夹和 ZIP 文件
// 每个输入会单独进行加密加签并打包成独立的 ZIP
// 然后这些独立的 ZIP 会被合并到一个最终的 ZIP 中
// 解压最终的 ZIP 后,会得到多个独立的已加密加签的 ZIP 文件
builder
  .build(['./dist/app1', './dist/app2', './dist/app3.zip'], './output/merged.zip')
  .then((path) => console.log('合并处理完成:', path));

示例 6:使用 Glob 模式

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true,
  sign: true
});

// 使用 glob 模式匹配所有 ZIP 文件
// 每个匹配的 ZIP 会单独进行加密加签,然后合并到一个最终的 ZIP 中
builder.build('./dist/*.zip', './output/all_zips.zip').then((path) => console.log('处理完成:', path));

// 匹配所有子目录下的 dist 文件夹
// 每个匹配的目录会单独进行加密加签并打包,然后合并
builder.build('./packages/**/dist', './output/all_dists.zip').then((path) => console.log('处理完成:', path));

// 混合使用 glob 模式和普通路径
builder
  .build(['./dist/app1', './dist/*.zip', './packages/**/build'], './output/merged.zip')
  .then((path) => console.log('合并处理完成:', path));

加密文件类型

默认情况下,以下类型的文件会被加密:

  • .html
  • .js
  • .json
  • .css
  • .txt

以下文件不会被加密(即使匹配类型):

  • gmu-hash-manifest.json
  • gmu-hash-manifest-v2.json

输出文件命名规则

如果不指定输出文件名,系统会自动生成:

  • 仅加密:{原文件名}_yyyyMMdd_encrypted.zip
  • 仅加签:{原文件名}_yyyyMMdd_signed.zip
  • 加密+加签:{原文件名}_yyyyMMdd_encrypted_signed.zip

注意事项

  • 二次加密限制:如果目录中已存在 gmu-config-manifest.json,则不能再次进行加密操作(除非同时进行加签)

  • 文件过滤优先级

    • 如果文件匹配 excludeFiles 中的任何模式,将被过滤
    • 如果文件匹配 excludePatterns 中的任何正则,将被过滤
    • 过滤的文件不会参与加密和加签操作
  • 临时文件:处理过程中会在系统临时目录创建临时文件,处理完成后会自动清理

  • 路径格式:支持相对路径和绝对路径,路径中的反斜杠会自动转换为正斜杠

  • 多输入处理方式

    • 单个输入:直接处理并打包成一个 ZIP 文件
    • 多个输入:每个输入会单独进行加密加签并打包成独立的 ZIP 文件,然后这些独立的 ZIP 文件会被合并到一个最终的 ZIP 中
    • 解压最终的 ZIP 后,会得到多个独立的已加密加签的 ZIP 文件,每个保持原始文件名

错误处理

import { SecurityBuilder } from '@winner-fed/build-security';

const builder = new SecurityBuilder({
  encrypt: true
});

builder
  .build('./dist', './output.zip')
  .then((path) => {
    console.log('成功:', path);
  })
  .catch((err) => {
    if (err.message === '路径不存在!') {
      console.error('指定的输入路径不存在');
    } else if (err.message === '文件名冲突!') {
      console.error('输出文件已存在,请更换文件名');
    } else if (err.message === '不可以进行二次加密!') {
      console.error('目录已加密,不能再次加密');
    } else {
      console.error('未知错误:', err);
    }
  });

API 参考

SecurityBuilder 类

导入

import { SecurityBuilder } from '@winner-fed/build-security';

构造函数

new SecurityBuilder(options);

方法

build(entry, outputName)

执行安全构建操作

  • 参数:
    • entry (string|string[]): 输入路径,支持:
      • 单个文件夹/ZIP 文件路径
      • 路径数组(多个输入)
      • Glob 模式(如 ./dist/*.zip./packages/**/dist
      • 混合使用(数组中可以包含普通路径和 glob 模式)
      • 多个输入时会合并到一个 ZIP 文件
    • outputName (string, 可选): 输出 ZIP 文件名
  • 返回: Promise<string> - 返回生成的 ZIP 文件路径
  • 抛出: 各种错误情况会抛出 Error

许可证

ISC

Keywords

security

FAQs

Package last updated on 18 Nov 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts