• 重写覆盖node_modules中的依赖文件


    为什么用?

    通过修复文件的方式对依赖包里的代码进行修复,甚至补充或定制符合自身项目需求的功能.

    如何实施?

    1. 在项目更目录创建 rewrite_node_modules 文件夹,与 node_modules 同级,
    2. 在 package.json 文件中的 scripts 中加入 patchFiles 命令,并将此命令配置在各个执行命令之前

        举例: 

        "scripts": {
            "dev": "npm run patchFiles && node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve",
            "stage": "npm run patchFiles && node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js --mode stage",
            "build": "npm run patchFiles && node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build",
            "build:report": "vue-cli-service build --report",
            "build:stage": "npm run patchFiles && node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build --mode stage",
            "build:preview": "npm run patchFiles && node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build --mode preview",
            "preview": "serve -s dist",
            "lint": "vue-cli-service lint",
            "postinstall": "npx patch-package",
            "patchFiles": "node ./src/utils/patchFiles.js"
        },

      3.添加文件

    ./src/utils/patchFiles.js
    const fs = require('fs')
    
    const path = require('path')
    const chalk = require('chalk')
    
    // 解决 node_modules 修改源码,导致重新装包而要手动替换源码的重复操作。
    // 将 new_node_modules 内的文件 覆盖 真正的 node_modules
    
    const REAL_NODE_MODULES = path.resolve('./node_modules') // 旧node_modules
    
    const MY_NODE_MODULES = path.resolve('new_node_modules') // 新node_modules
    
    copy(MY_NODE_MODULES, REAL_NODE_MODULES)
    
    /**
    
    *复制目录中的所有文件包括子目录
    *@param{string}需要复制的目录、文件
    *@param{string}复制到指定的目录、文件
    *@param{function}每次复制前,都会经过一次filterFn,若返回true,则复制。
    
    */
    
    function copy(origin, target, filterFn = () => true) {
      if (fs.statSync(origin).isDirectory()) {
        // 来源是个文件夹,那目标也整一个文件夹
    
        if (!fs.existsSync(target)) {
          fs.mkdirSync(target)
        }
    
        fs.readdirSync(origin).forEach(originName => {
          const originFilePath = path.resolve(origin, originName)
    
          const targetFilePath = path.resolve(target, originName)
    
          copy(originFilePath, targetFilePath, filterFn)
        })
      } else if (filterFn(origin, target)) {
        console.info(chalk.blue('已被覆盖的文件:', target))
        fs.copyFileSync(origin, target)
      }
    }
    
    console.info(chalk.bold.yellow(' 以上的文件已被rewrite_node_modules中的文件替换,升级版本后请注意检查!!!'))

    有什么特性?

    1. 同名文件会替换,如果new_node_modules中有而node_modules中没有的文件为新增。
    2. 同名文件的替换是整个文件的复制替换,不是文件内代码的局部替换。
    推荐参考:https://blog.csdn.net/xxitcef/article/details/117378817

    方案二:

    使用patch-package修改Node.js依赖包内容



  • 相关阅读:
    Hadoop 单机搭建 Scala安装
    Hadoop 单机搭建 Hbase单机模式搭建
    Hadoop 单机搭建 hadoop单机搭建
    Linux shell 重定向学习笔记
    转:SQLServer中的GROUPING,ROLLUP和CUBE
    ueditor getshell漏洞重现及分析
    SQLServer禁用、启用外键约束
    转:Sql Server中清空所有数据表中的记录
    EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
    12种开源Web安全扫描程序
  • 原文地址:https://www.cnblogs.com/wxyblog/p/16283533.html
Copyright © 2020-2023  润新知