代码之家  ›  专栏  ›  技术社区  ›  bucabay

node.js lazy-require模块

  •  0
  • bucabay  · 技术社区  · 6 年前

    我正在编写一个lazy模块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]
    }
    

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

    找不到模块“”。

    console.log语句日志:

    懒惰的要求 {target: {…}, name: "./Linking"}

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

    不是那样的 require(".") 错误指示的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   bucabay    6 年前

    找到相关的错误报告:

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

    自节点 require 树分辨率是静态评估/分析的,Webpack假定它在动态分辨率上失败。

    此外,在浏览器上,webpack在在浏览器中运行之前必须先开发出所需的包,因此动态的lazy需求不能在开发之后运行。你会错过所需模块的发泄源。

    我试过用 import() 但它也有缺陷:

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