javascript - 如何在 webpack hook 中打破循环

标签 javascript node.js vue.js webpack nuxt.js

我正在处理一个 nuxt.js 项目,我需要在每个更改的文件(即每个 webpack 构建)上运行一个 shell 脚本。

所以我正在使用 Webpack Hooks

我创建了我的 Webpack Plugin

/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.nuxtwebpack.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 而不会生成无限构建

提前致谢

最佳答案

我创建了一个库并解决了我的问题,下面是链接:

Weback Plugin - named-exports

关于javascript - 如何在 webpack hook 中打破循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56658173/

相关文章:

javascript - 在具有 1 个 mongoose 查询的函数中使用 async wait 是否合适?

javascript - 如何在不使用输入元素的情况下捕获 Vuejs 中的任何按键事件

vue.js - v-model 和子组件?

javascript - D3.js 中的 setTimeout

当预期 > 0 时,JavaScript 正则表达式返回 -1

javascript - 如何从 axios Promise javascript 返回值

javascript - 在 CANVAS 上绘制图像数组

javascript - 在 Express JS 中设置 HTTPS

node.js - 当调用 Axios GET 并且 express 服务器发送 .json() 时,在 xhr.js 上捕获 404

javascript - 如何等待所有数据下载到Firebase(Firestore)存储中?