ES6 在动态导入中包含引用/依赖项

问题描述 投票:0回答:1

我有 FileA 可以从不同的目录动态导入 FileB 。 动态导入失败,因为FileB导入模块“lodash”。

错误显示

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'lodash'.

文件A.js

// ... My other codes
import("file://D:/plugins/FileB.js");
// ... My other codes

文件B.js

import { now } from "lodash";
console.log(now());

export const Person = {
    name: "John Doe"
}

我的问题是如何添加动态导入中需要的依赖(这里是动态导入中添加lodash)?

注:

  • 代码不适用于浏览器。
  • FileA 是 npm 项目,安装了“lodash”作为依赖项。 FileB 是位于该项目外部的单个文件。
  • 如果我删除 FileB 中与“lodash”相关的代码,则动态导入 工作正常。
javascript ecmascript-6 dynamic-import
1个回答
0
投票

当您从项目目录外部动态导入

FileB
时,Node.js 不会将项目的
node_modules
文件夹识别为
FileB
的依赖项源。您可以尝试使用以下一些方法让
lodash
可以访问
FileB

选项 1:使用
NODE_PATH

指定依赖路径

设置

NODE_PATH
环境变量以指向项目的
node_modules
目录。这允许 Node.js 解析此路径中的模块,即使是从项目外部导入文件时也是如此。

对于 Windows,您可以这样设置

NODE_PATH

set NODE_PATH=D:\path\to\your\project\node_modules
node FileA.js

对于 macOS/Linux,请使用:

export NODE_PATH=/path/to/your/project/node_modules
node FileA.js

选项 2:在
lodash
 中动态加载 
FileB

修改

FileB
以在需要的函数内动态加载
lodash

// FileB.js
const lodash = await import("lodash");
console.log(lodash.now());

export const Person = {
    name: "John Doe"
};

此方法允许您将

lodash
指定为
FileA
package.json
中的依赖项,并且
FileB
将使用动态导入的
lodash
,而不会因模块解析问题而中断。

选项 3:使用绝对路径
FileB

另一种解决方法是将

FileB
复制到项目目录中或使用
lodash
的绝对路径:

// FileB.js
import { now } from "file:///D:/path/to/your/project/node_modules/lodash";
console.log(now());

export const Person = {
    name: "John Doe"
};

这样,

lodash
就会从项目的
node_modules
中显式加载。

让我知道这些方法之一是否有帮助,或者您是否有任何特定限制!

© www.soinside.com 2019 - 2024. All rights reserved.