npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

random-dom-mix

v1.0.2

Published

mix the 'id' or 'class' in your project

Downloads

9

Readme

Mix

根据用户配置自动混淆代码中的选择器名称,包括类html、css和js文件的自动混淆,支持多种过滤形式和自定义混淆处理,可利用此库自行开发编译工具插件,示例请参见:

使用方法

安装

执行npm install -g random-dom-mix安装插件

配置参数详细说明

  • list: [ ] || '' ;必填 指定进行混淆的widget下的路径,支持正则 (只支持一种string类型的内容-'./*',表示处理所有文件)
   // for example:
   // fis:
   list: [
       'widget/test',
       /widget\/dialog\/.*\.js/
   ]

以下是传入的跟打包工具相关的处理参数

  • resource: { } ;必填 文件资源对象
    // for example:
    // fis:
    ret.id[fileKey] = { };  
    ret.id[moduleName:widget/xx/xx.js] = {
        realpath: 'Document/moduleName/widget/xx/xx.js',
        _content: 'xxxxx'
    }
    // webpack:
    compilation.assets[filename] = source;
  • pathKey: '' ; 文件的key值,看不同编译工具的数据结构处理,如上。如果不传入这个,则默认是使用resource对象的key值作为文件标志(即文件名)
  • getFileContent: Function ;必填 获取单个文件的内容.因为不同打包处理工具的文件资源对象数据格式不同,所以由具体插件编写者来定义
    // fis:
    getFileContent: function (fileItem) {
        return fileItem._content;
    }
  • setFileContent: Function ;必填 设置文件的内容
   // fis:
   setFileContent: function (fileItem, data) {
       fileItem._content = data;
   }

以下是处理过程中需要的判断参数

  • ignore: { }; 不进行混淆的选择器
    ignore:{
        name: ['.test', '.clearfix', '#test'],
        classReg: [/^global-.+/]
    }
  • onlyMixClass: [ ] ; 只对指定的类名进行混淆
    onlyMixClass: ['module-test', /^module-.+/]
  • jsPrefix: [ ] ; 对有特殊前缀的进行处理,因为在js中有些写法无法匹配到,以此标志进行识别此项需要用户排查代码添加前缀
    jsPrefix:['JS-']
  • randomStrLen: Number; 被混淆后的随机字符串的长度,不填默认为6位
  • randdomStrMaxLen: Number; 随机字符串的最大长度,用它来指定长度的变化范围[randomStrLen, randdomStrMaxLen], 不填默认8位
  • mixNameFun: Function ; 用户自定义选择器名称的混淆方法
  • customMix { }; 这里设置的选择器才会被mixNameFun进行混淆处理,支持正则
    customMix: {
        name: ['module-test', /^frame-.+/],
        path: [/\/test\/.*test.(css|js)/i]
    }
  • mixAttr: [ ]; 需要混淆的属性值。 对于自定义混淆的属性,因为属性值不涉及到跨模块使用,所以不支持ignore配置。并且只支持简单的选择器写法以及attr这种,如发现不符合要求,可自行扩展mixer。only be processed in html & js [String or Array]
    mixAttr: ['data-id']
  • mixer: { }; 感觉功能无法被满足,可以自定义混淆逻辑
    mixer: {
        js: [function(code) {
            // var map = this.map; // 混淆前后索引表, map.id, map.class
            // do the process
            return code;
        }],
        html: [],
        css: []
    }
  • getProcessedResult: Function; 调试方法,获取处理结果的map表。对于处理结果比较多的,建议单个组件进行调试。
    getProcessedResult: function (map, customMap) {
        console.log(map.id, map.class);
        console.log(customMap.id, customMap,class);
    }

使用效果

自动替换模板文件中的样式选择器(id|class="xxx"), 同步替换对应css中的选择器

开发代码:

    <style>
        #id-test {
            color: red;
        }
        .module-test {
            position: relative;
        }
    </style>
    <div class="module-test ignore-test" id="id-test"></div>

编译后:

    <style>
        #dU9d2K {
            color: red;
        }
        .KD9eiR {
            position: relative;
        }
    </style>
    <div class="KD9eiR ignore-test" id="dU9d2K"></div>

自动替换JS代码中的选择器名称

  • 自动匹配原生JS方法getElementsByClassName、getElementById、setAttribute中的class|id
  • 自动匹配jquery方法中的(add|remove|has|toggle)Class对应的一个或多个class
  • 自动匹配jquery方法中的$('')及find('')等写法中对应的一个或多个class
  • 支持自定义js前缀匹配,用于匹配无特殊标志的js写法(详见jsPrefix介绍)
  • 支持属性值的混淆(详见mixAttr介绍)
  • 支持自定义混淆逻辑(详见mixer介绍)

开发代码:

    var a = document.getElementsByClassName('module-test');
    var b = $('.module-test2');
    b.addClass('style-test style-test2');
    // 配置的jsPrefix: ['JS-']
    var className1 = 'JS-test1';
    var className2 = className1 + ' JS-test2';
    // 可配置mixAttr: ['data-test'],来混淆属性中的值
    b.html('<div class="' + className2 + '" data-test="attr-test">');

编译后:

    var a = document.getElementsByClassName('de93SIL');
    var b = $('.Lkj9cn');
    b.addClass('ogPy3k KSwjd9');
    // 配置的jsPrefix: ['JS-']
    var className1 = 'k8dNHG';
    var className2 = className1 + ' lcjWSo';
    // 可配置mixAttr: ['data-test'],来混淆属性中的值
    b.html('<div class="' + className2 + '" data-test="bhg7YT">');

处理情况说明

处理的文件内容可以分为两种:

  • 一种是经过打包工具处理的文件资源对象
  • 一种是原生的本地文件资源 因为编译过程不会直接修改本地文件,所以不支持第二种,但如果有这种需求可以自己构造resource和list

对开发过程的影响

  • js代码中无法匹配的写法, 即没有特殊标志的需要手动添加自己在jsPrefix里配置的前缀
// 如下代码没有无法匹配到:
var className = 'module-test';
// 如果jsPrefix配置为'JS-',需要改写为
var className = 'JS-module-test';
  • 代码中有设置颜色属性的,如下这种,需要自己在配置里ignore掉
$header.css('color', '#6EB562');
// ignore的配置中需要加上
ignore: {
   name : ['#6EB562']
}
  • css注释中使用要规范,不要使用//, 应使用/**/