首页 > 解决方案 > 从 node_modules 位置以外的位置解析 nodejs 模块,有可能吗?

问题描述

例如,当我需要一个位于内部的模块时,node_modules我可以编写const module = require('module')import module from 'module'. 如果模块位于我需要写的另一个位置const module = require('../location/module'),等等......

这种行为并不总是需要的,例如,如果我有我希望用户能够复制/粘贴和运行的示例,并且还可以从项目文件夹本身运行此示例。

这可以实现吗?

标签: node.jsnode-modules

解决方案


我不明白为什么我被否决了,但我最终编写了以下包装器来完成这项工作:

const customRequire = function (moduleName, path) {
  let module
  try {
    module = require(moduleName)
  } catch (e) {
    try {
      module = require(`${path}/${moduleName}`)
    } catch (e1) {
      throw Error(`module ${moduleName} on path ${path} wasn't found`)
    }
  }
  return module
}

现在,如果您复制/粘贴此代码,它将起作用。如果您将在项目中运行它,其中定义了所需的模块并且不位于node_modules它也可以工作。

上述解决方案适用于 CommonJS 模块系统,对于 ES6,您需要使用该功能import动态导入模块

import('/modules/my-module.js')
  .then((module) => {
    // Do something with the module.
  });

推荐阅读