Node.js 惰性需求模块

Node.js lazy require module

我正在编写一个惰性模块 require() 或 import

const lazy = new Proxy({}, 
  {
    get: function (target, name) {
      console.log('lazy require', { target, name })
      return require(name)
    }
  }
)

/**
  * @param {string} Module Name
  * @example const expo = requirez('expo')
  */
export default function requirez(name) {
    return lazy[name]
}

奇怪的是,当我 运行 它时,我得到:

Cannot find module "."

console.log 语句日志:

lazy require {target: {…}, name: "./Linking"}

所以 require(name) 应该被称为:require("./Linking")

与错误指示的 require(".") 不同。

找到相关错误报告:

https://github.com/webpack/webpack/issues/4921

由于节点 require 树解析是静态的 evaluated/analyzed 并且 webpack 假定它在动态解析时失败。

此外,在浏览器上,webpack 必须在 运行 之前在浏览器中转译所需的包,因此转译后动态惰性要求不能 运行。您会丢失所需模块的转译源代码。

我试过使用 import() 但它也有错误:

https://github.com/webpack/webpack/issues/4292#issuecomment-280165950