之前node版本都是使用CommonJS规范,通过require导入模块的。
不过目前node已经支持ES6,即import导入,只需要在package.json文件添加以下这句话即可使用import导入:
"type": "module"
使用require导入时,可以非常方便的实现动态导入,代码如下:
let { model, key } = result
let excute = require(`../model/${model}/excute`)
let data = await new excute().findOneByID(objID).lean()
但是使用了import后,就没那么简单了。
先说一下项目实际需求吧,需要通过客户端post一个关键字,然后通过这个关键字,实例化不同的类,每个类都有一个findOneByID方法,但是具体哪个类需要通过前端传入,那么必须要使用动态导入了,网上查了一下资料,实现起来也不难。
直接贴代码了,主要是用到impot和then
const model='user'
import(`../model/${model}/db.js`).then(async _module => {
const n=new _module.default()
const result=await n.findOneByID('xxxx')
console.log(result)
})
这里为什么要使用default呢,因为_module下面有这样一个属性,所以必须要解构出来,以下就是直接打印_module的结果,可以看到default属性
[Module: null prototype] { default: [class User] }
至此import动态引入模块即可实现,还是非常方便的。