Искать текст между многими файлами в Node.js - PullRequest
0 голосов
/ 14 марта 2020

Используя jest с узлом, я хочу проверить, не конфликтовал ли один из моих файлов с разрешением GIT. Я сделал код, который работает на моей машине:

const cmd = `find . -not \\( -path ./node_modules -prune \\) -not \\( -path ./.next -prune \\) -not \\( -path ./.git -prune \\) -type f -print0 | xargs -0 grep -li "<<<< HEAD"`

describe('Git conflicts', () => {
  test('All conflicts should be resolved', () => {
    const result = require('child_process')
      .execSync(cmd)
      .toString('utf8')
    expect(result).toBe('./server/__tests__/check-git-conflicts.test.js\n')
  })
})

Однако, как я уже сказал, он работает на моей машине ... Но он не работает в разных средах, потому что я выполняю непосредственно UNIX команда.

Для того, чтобы сделать его более надежным. Я хочу изменить эту команду:

find . -not \\( -path ./node_modules -prune \\) -not \\( -path ./.next -prune \\) -not \\( -path ./.git -prune \\) -type f -print0 | xargs -0 grep -li "<<<< HEAD

Чтобы записать ее просто в коде node.js, чтобы она была более совместимой со средами. Я пытался использовать fs.readFile, но у меня не получилось ...

Кто-нибудь знает эффективный способ Node.js для поиска текста во многих файлах?

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

Я решил таким образом:

const fs = require('fs')

const toIgnore = [
  'node_modules',
  '.next',
  '.git',
  'check-git-conflicts.test.js',
]

function getFilesWithSomeConflict(dir, files_) {
  files_ = files_ || []

  fs.readdirSync(dir).forEach(file => {
    const name = dir + '/' + file
    if (toIgnore.includes(file)) return
    if (fs.statSync(name).isDirectory()) {
      getFilesWithSomeConflict(name, files_)
      return
    }
    if (fs.readFileSync(name).includes('<<<< HEAD')) {
      files_.push(name)
    }
  })

  return files_
}

describe('Git conflicts', () => {
  test('All conflicts should be resolved', () => {
    const result = getFilesWithSomeConflict('.')
    expect(result).toHaveLength(0)
  })
})
0 голосов
/ 14 марта 2020

Используйте «process.platform» и храните информацию об ОС в переменной. Установить команду на основе работающей ОС. Например:

var os = process.platform
const cmd = ""
if(os==="linux")
const cmd = `find . -not \\( -path ./node_modules -prune \\) -not \\( -path ./.next -prune \\) -not \\( -path ./.git -prune \\) -type f -print0 | xargs -0 grep -li "<<<< HEAD"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...