Я работаю с проектом 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 и не создавайте бесконечные сборки
заранее спасибо