Обновление содержимого файла с помощью хэша другого файла - PullRequest
0 голосов
/ 12 января 2019

Я борюсь с этим глотком. У меня есть файл, который мне нужно изменить после сборки, который является частью пакета PWA с использованием Angular Service Worker. В результате модификации мне нужно пересчитать хеш и обновить запись в файле ngsw.json, содержимое которого выглядит следующим образом.

 "hashTable": {
    "/1.a634d7bd57cc0b60b07a.js": "f67c68837f048be737dcb1359072fc40c1f93144",
    "/10.b18571adf198206cc401.js": "c59d8f124964b73456f22ed3a51efec0493ce7c5",
    "/100.625f7b4770945172db3e.js": "da62af393973a8eb002874406e8a1dd828faecaf",
    "/main.5be263c044e031156b6b.js": "5bfa4ec8a86ee2ab4a5f2f999b0742ac4a5ddbc7"
}

Я знаю имя файла, который требует обновления хеша, и у меня есть эта функция

let hashsum = require("gulp-hashsum");
function getHash() {
    gulp.src(["www/main*.js"]).pipe(hashsum({
            stream: true,
            json: true
        }
    )).pipe(gulp.dest( 
      // How to replace ngsw.json 'hashTable' entry with this response? )); 
    }

Я не очень знаком с глотком, и любая помощь будет признательна.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете написать плагин, который будет принимать результат из hashsum и просто использовать fs для изменения вашего json.

Вот наивная реализация:

const fs = require('fs')
const path = require('path')
const through = require('through2')
const hashsum = require('gulp-hashsum')

const modifyJson = ({ fileName, src, property }) => through.obj((file, _, cb) => {
  const { name } = path.parse(file.path)
  if (name !== fileName) return cb(null, file)

  const pathToJson = path.resolve(__dirname, src)
  if (!fs.existsSync(pathToJson)) {
    return cb(new Error(`${src} doesn't exist.`), file)
  }
  const json = JSON.parse(fs.readFileSync(pathToJson, 'utf8'))

  const content = JSON.parse(file.contents)
  if (typeof json[property] === 'undefined') console.warn(`${src} doesn't has any property named '${property}' A new one will be created.`)
  json[property] = content
   fs.writeFileSync(pathToJson, JSON.stringify(json))

  return cb(null, file)
})

Использование:

exports.modifyJson = () =>
  src(['app/**/*.js'])
  .pipe(hashsum({
    stream: true,
    json: true,
  }))
  .pipe(modifyJson({
    fileName: 'SHA1SUMS',
    src: './test.json',
    property: 'hashTable',
  }))

У меня есть этот код в gist здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...