electron 如何导入某文件夹下的全部模块?

开发平台: win10

个人使用,不打算发布到npm

我想实现的是:设置Extensions文件夹,里面存放扩展,electron运行时自动加载Extensions里的所有扩展
比如 Extensions/test.js

// test.js
module.exports = (ctx) => {
  const register = () => {
    console.log(ctx);
  }
  return {
    register
  }
}

Extensions文件夹在程序根目录

我的实现(伪代码):

import { app } from 'electron'
import path from 'path'
const pluginPath = path.join( path.dirname(app.getPath('exe')), 'Extensions')

getPlugin(path) {
    return require(path)('233')
}

getPlugin(pluginPath)
  

运行后报错:

Error: Cannot find module 'E:\Project\Electron\MoeEx\node_modules\electron\dist\Extensions\test.js'

请问,我应该怎样实现呢?

谢谢

阅读 3.9k
1 个回答

hi,webpack中有一个好用的属性,相信你会喜欢的require.context

实例:

目录

./demo
├ demo.js
├ context
      ├ index.js
      ├ yyy.js
      └ xxx.js

index.js

const files = require.context('.', false, /\.js$/)
const modules: any = {}
files.keys().forEach((key) => {
  if (key === './index.js') {
    return
  }
  modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
})
export default modules

yyy.js

export default "yyy";

xxx.js

export default "xxx";

demo.js

import demo from "./context";

console.log(demo.xxx); // xxx
console.log(demo.yyy); // yyy
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题