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
我正在编写一个惰性模块 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