gpt4 book ai didi

javascript - ES 模块和 jsconfig.json : Error [ERR_MODULE_NOT_FOUND]

转载 作者:行者123 更新时间:2023-12-05 00:38:13 32 4
gpt4 key购买 nike

我有一个使用常规 JS 的 Node Web 应用程序项目。
我正在尝试使用 jsconfig.json 设置一些路径.我尝试使用 Node 默认的 Subpath imports 即使它确实有效,vscode 智能感知也停止了工作。
我发现你可以使用 jsconfig.json所以我设置了这个文件

{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"baseUrl": "./",
"paths": {
"@controllers/*": ["node/controllers/*"],
},
},
"exclude": ["node_modules"]
}
在我的 package.json 上我添加了
"type": "module",
我的文件夹结构是
├── node
│ └──controllers
│ └── foo.js
├── server.js
├── jsconfig.json
└── package.json
但是当我尝试从 server.js 导入时
import { foo } from '@controllers/foo.js'
// or import { foo } from '@controllers/foo'
foo.js
export const foo = 'Hello server'
我明白了
node:internal/process/esm_loader:74
internalBinding('errors').triggerUncaughtException(

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@controllers/foo.js' imported from /Users/Alvaro/Sites/test/server.js

at new NodeError (node:internal/errors:363:5)
at packageResolve (node:internal/modules/esm/resolve:698:9)
at moduleResolve (node:internal/modules/esm/resolve:739:18)
at Loader.defaultResolve [as _resolve] (node:internal/modules/esm/resolve:853:11)
at Loader.resolve (node:internal/modules/esm/loader:89:40)
at Loader.getModuleJob (node:internal/modules/esm/loader:242:28)
at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:73:40)
at link (node:internal/modules/esm/module_job:72:36) {
code: 'ERR_MODULE_NOT_FOUND'

最佳答案

经过数小时的研究,我发现在使用 esm 时很难拥有自定义别名路径。并且非常容易配置为commonjs ,
但是当您使用 esm 时,它可以以稍微不同的方式实现。 ,
我将为 esm 编写解决方案 中的实现方法一然后是 commonjs方法二
方法一
步骤 0:
删除 jsconfig.json 第一步:
在您的 package.json添加 exports属性(property),

"name": "package-name"

"exports":{
"./@controllers/" : "./node/controllers/"
}

注:不要忘记 @controllers 之后的“/”和 /node/controllers/ 第二步
你将不得不导入文件
  import {foo} from "package-name/controllers/index.js" 
/*
package-name is the same value as the 'name' property in
the package.json
*/

了解更多 exports位于 package.json 的属性(property)引用 here
------------------------------XXXXXXXX------ ---------------
方法二
你不能使用 es modules在这个方法中
步骤 0
安装 module-alias包裹。 npm i module-alias删除 type:module如果它存在于 package.json或将值更改为 commonjs ;
第一步
在指定为 的文件的起始行添加以下代码entry point package.json require(module-alias/register)查看 main位于 package.json 的属性(property)在 作者案例应该是 server.js .
package.json添加这个
"_moduleAliases": {
"@root" : ".", // Don't forget to mnetion this
"@controllers" : "node/controllers/*"
}

现在您可以从以下目录中要求模块
const {foo} = require("@controllers/foo.js") // if foo is named export 

//or

const foo = require("@controllers/foo.js");

你可以引用更多关于 module-alias图书馆 here

关于javascript - ES 模块和 jsconfig.json : Error [ERR_MODULE_NOT_FOUND],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69376027/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com