Modifique o código-fonte em node_modules por meio de nodejs

Ao desenvolver um projeto, quando a configuração padrão em node_modules não atende aos requisitos atuais do projeto, é necessário modificar o código-fonte correspondente em node_modules. No entanto, se você operar diretamente o código-fonte para modificação manual, o código não será sincronizado com o warehouse.Quando outras pessoas extraem o código para desenvolvimento ou após executar a instalação do npm, o código-fonte ainda é a configuração padrão. Neste momento, você pode operar o código-fonte por meio de nodejs, que pode atender às necessidades atuais.

Etapa 1: crie um diretório de arquivos para armazenar conteúdo modificado

Crie uma pasta change_modules para armazenar o conteúdo do arquivo modificado, mas o diretório do arquivo modificado precisa ser consistente com o diretório do arquivo modificado em node_modules . Por exemplo, o diretório onde o arquivo modificado xmllint.js está localizado é: node_modules/@wepy/cli/core/util/xmllint.js, então o diretório do arquivo recém-criado deve ser: change_modules/@wepy/cli/core/util /xmllint.js, conforme mostrado na imagem

Etapa 2: modifique o conteúdo

Basta colar todo o conteúdo do arquivo modificado no diretório correspondente em change_modules e modificar os locais que precisam ser alterados.

Terceiro Passo: Copiar | Substituir

Crie um novo arquivo change_modules.js, que armazena a sintaxe relevante para substituição de arquivo

const fs = require('fs')
const path = require('path')

// 将 change_modules 内的文件覆盖在node_modules中
const REAL_NODE_MODULES = path.resolve('./node_modules') // 旧node_modules
const MY_NODE_MODULES = path.resolve('./change_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)) {
    //执行替换
    fs.copyFileSync(origin, target)
  }
}

Etapa 4: modificar package.json

Adicione a sintaxe para executar change_modules.js em package.json, para que a execução de change_modules.js substitua o arquivo correspondente antes da execução do projeto, conforme mostrado na figura: 

Após realizar as operações acima, execute o projeto e pronto!

Detalhes de sintaxe do nodejs relacionados

require('fs') : O módulo fs é um dos módulos principais do nodejs, que lida principalmente com operações como leitura e gravação, cópia, exclusão e renomeação de arquivos. Quando precisar usar este módulo, você precisará importar este arquivo primeiro.

path.resolve():  Este método resolve um caminho/segmento de caminho em um caminho absoluto.

fs.statsync(path): Receba uma variável de caminho para obter informações detalhadas do caminho.

isDirectory(): Determine se é um diretório, o diretório retorna verdadeiro e o arquivo retorna falso.

fs.existsSync(path): verifica se o caminho especificado existe.

fs.mkdirSync(path): usado para criar um diretório.

fs.readdirSpath(path): Obtenha todos os nomes de arquivos no diretório especificado.

fs.copyFileSpath(beforePath,newPath): usado para copiar arquivos de forma síncrona do caminho de origem para o caminho de destino.

Acho que você gosta

Origin blog.csdn.net/weixin_44594219/article/details/127206080
Recomendado
Clasificación