• 自定义npm包混淆过滤发布至nexus私服


    目录

    背景      

    新建npm工程

    添加测试代码

    添加依赖包

    混淆配置

    执行混淆

    配置与发布


    背景      

            最近做项目,有这么一个需求,前端有一部分纯es6代码(注意不是vue,不带任何html页面),不想将代码交付给客户,但项目中又得用。所以临时想到了一个解决办法。

            将此部分代码抽出,代码混淆后,将混淆的代码,发布至nexus中,然后开发工程中在package.json中引用该包。不耽误开发调用,点进源码全是混淆后的代码,基本也都看不明白了。

            核心思想就两点:1.代码混淆javascript-obfuscator; 2.npm publish 白名单过滤

    新建npm工程

    1. mkdir test-npm
    2. cd test-npm
    3. yarn init 或 npm init

    添加测试代码

    为了测试,随便写个es6的类并导出。

    添加依赖包

     添加混淆代码用的工具包:

    yarn add javascript-obfuscator -d

            这里注意,依赖的包尽量放在package.json中的devDependencies里,因为我们publish到私服的包中是不包含依赖包的,如果这些依赖包是必要的,那么调用工程需要添加这些依赖包,如果不必要,那么调用工程不添加也不会报错,反之放在dependencies里,不管是不是必要的,调用工程都要添加相关依赖。

            这里的javascript-obfuscator包,就是为我们代码混淆用的,不是代码必要的依赖包,所以调用工程也不会引用这个包。

    混淆配置

            新建一个config.json,文件名可自定,位置也可自定。然后添加一些混淆的配置。具体配置和含义可以百度,这里就不详细说明了。这个配置文件甚至都可以不用,如果不指定,它会走默认的配置。

    配置如下:

    1. {
    2. "compact": true,
    3. "controlFlowFlattening": false,
    4. "deadCodeInjection": false,
    5. "debugProtection": false,
    6. "disableConsoleOutput": true,
    7. "identifierNamesGenerator": "hexadecimal",
    8. "log": false,
    9. "renameGlobals": false,
    10. "rotateStringArray": true,
    11. "selfDefending": true,
    12. "unicodeEscapeSequence": false
    13. }

     混淆命令配置:

     在package.json中添加

    1. "scripts": {
    2. "obf": "javascript-obfuscator ./src --config config.json --output ./publish []"
    3. },

    意思就是,将src目录下的代码根据config.json的配置进行混淆,输入到publish目录下。

    最终package.sjon

    执行混淆

    输入yarn pbf

    1. PS D:\Work\demo\test-npm> yarn obf
    2. yarn run v1.22.5
    3. $ javascript-obfuscator ./src --config config.json --output ./publish []
    4. [javascript-obfuscator-cli] Obfuscating file: src\Test.js...
    5. Done in 0.53s.
    6. PS D:\Work\demo\test-npm>

    项目中会多出一个publish文件夹,里边放的就是混淆后的代码。

    我们将代码格式化一下,已经面目全非了。

    配置与发布

    在package.json添加如下代码,表示json后缀的文件和publish文件下的代码会被发布到nexus中。

    1. "files": [
    2. "publish",
    3. "*.json"
    4. ],

    然后控制台配置nexus后发布,工程中直接add我们发布的包即可。

    1. 配置镜像
    2. npm config set registry=https://nexus私服仓库地址
    3. 登录
    4. npm login -registry=https://nexus私服仓库地址
    5. 发布
    6. npm publish -registry=https://nexus私服仓库地址

  • 相关阅读:
    基于虚拟力优化的无线传感器网络覆盖率matlab仿真
    超详细的springBoot学习笔记
    Centos指令合集
    Protobuf的简单使用
    什么是P问题、NP问题和NPC问题
    go语言基本操作---三
    Kafka系列之:安装具有安全认证的kafka-2.8.2分布式集群
    主键约束!
    C语言——扫雷游戏最全讲解
    C杂讲 结构体对齐
  • 原文地址:https://blog.csdn.net/delongcpp/article/details/126498939