как разорвать петлю в крючке - PullRequest
5 голосов
/ 19 июня 2019

Я работаю с проектом nuxt.js, мне нужно запустить скрипт оболочки для каждого измененного файла, то есть для каждой сборки веб-пакета.

, поэтому я использую Webpack Hooks

Я создал свой плагин Webpack

/plugins/NamedExports.js

const pluginName = 'NamedExports'
const { exec } = require('child_process')

class NamedExports {
  apply(compiler) {
    compiler.hooks.beforeCompile.tap(pluginName, (params, callback) => {
      exec('sh plugins/shell.sh', (err, stdout, stderr) => {
        console.log(stdout)
        console.log(stderr)
      })
    })
  }
}

export default NamedExports

plugins/shell.js

parameters=$(ls components)
for item in ${parameters[*]}
do
    ls components/$item/ | grep -v index.js | sed 's#^\([^.]*\).*$#export { default as \1 } from "./&"#' > components/$item/index.js
done

echo "worked"

этот скрипт предназначен для именованных экспортов в каждую папку в каталоге компонента, пример

components/atoms/ButtonStyled.vue components/atoms/BoxStyled.vue

тогда генерируется components/atoms/index.js

export { default as ButtonStyled } from "./ButtonStyled.vue"
export { default as BoxStyled } from "./BoxStyled.vue"

Я зарегистрировал свой плагин в nuxt.config.nuxt или webpack.config.js

import NamedExports from './plugins/NamedExports.js'

export default {
  // ... other config here ...
  build: {
    plugins: [
      // ... other plugins here ...
      new NamedExports()
    ],
  }
}

но когда я запускаю свое приложение и изменяю любой файл, сервер говорит, что было внесено изменение в components/atoms/index.js, а затем выполняется новая сборка, поэтому он получает бесконечную сборку.

Может кто-нибудь помочь мне разорвать этот цикл?

когда нужно изменить файл, просто сгенерируйте новый index.js и не создавайте бесконечные сборки

заранее спасибо

Ответы [ 2 ]

1 голос
/ 09 июля 2019

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

Плагин Weback - именованный экспорт

0 голосов
/ 19 июня 2019

Проблема, очевидно, в том, что новые файлы запускают сборку.Концептуально, есть несколько способов сделать это.

1) если файлы обновляются, не выводите новые файлы.Вам нужно сравнить метки времени для этого.Это, вероятно, будет грязно.

2) напишите загрузчик.Совпадение components/**/index.js, выведите правильный javascript для него.Убедитесь, что не имеет состояния .Т.е. не выводить другой файл, просто строку.

Затем поместите фиктивные файлы в каждый каталог с комментарием, который автоматически генерируется плагином веб-пакета.

Еще лучше, если ваш фиктивный файл сообщает веб-пакету, как его сгенерировать.

https://webpack.js.org/contribute/writing-a-loader/

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