Javascript 节点14:使用本机ES6模块的绝对路径导入模块
我正在nodeJavascript 节点14:使用本机ES6模块的绝对路径导入模块,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我正在node14.9.0中编写一个应用程序。我已经创建了一个ES6模块,在我的包.json中添加了“type”:“module”。我正在尝试为我的项目导入模块。我希望避免使用相对导入(因为。/../非常可读),而是希望使用绝对导入,就像每个模块都是从项目根目录中的index.js文件导入一样 根据我收集的关于node如何发现模块的信息,在导入路径前面省略,应该会使node默认为从项目的根目录中查找模块。然而,它却试图从我的硬盘的根来看 。。。 从“/models/User.model”导入用户
14.9.0
中编写一个应用程序。我已经创建了一个ES6模块,在我的包.json
中添加了“type”:“module”
。我正在尝试为我的项目导入模块。我希望避免使用相对导入(因为。/../
非常可读),而是希望使用绝对导入,就像每个模块都是从项目根目录中的index.js
文件导入一样
根据我收集的关于node如何发现模块的信息,在导入路径前面省略
,应该会使node默认为从项目的根目录中查找模块。然而,它却试图从我的硬盘的根来看
。。。
从“/models/User.model”导入用户;
...
错误[ERR\u MODULE\u NOT\u FOUND]:找不到从C:\Users\user\Documents\My App\My App\index.js导入的模块“C:\models\user.model”
我没有使用打字脚本,网页包,巴贝尔,或任何其他传输。是否可以在没有它们的情况下获得绝对导入?因为缺少
*.js
扩展名。ECMA节点模块()需要它。这将是一项工作(现在我正在节点14中开发,没有Babel):
在root package.json中,您必须添加:
"type": "module"
“在导入路径前面省略.from应该使节点默认为从我的项目.t的根查找模块”。不,那是不对的。如果路径以
/
开头,那么它将从驱动器的根开始,就像任何操作系统功能的路径一样。没有前缀使其从项目的根开始。模块不了解您的项目。他们只知道自己(在这方面他们是独立的)和当前的工作目录(根据程序的启动方式可能会有所不同)。如果你想相对于你的模块目录,然后,您需要在提升一个或多个级别的路径中使用/
或一个或多个。/
。在这种情况下,您建议如何设置绝对导入?@Nostupidquestions如果您希望相对于项目文件夹解决这些问题,则这不是绝对导入。您可以从“models/User.model”编写导入用户代码>,并告诉您的模块加载程序从哪个位置解决该问题。对于绝对导入(通常不是您想要的),您只需放置完整路径,甚至包括驱动器。如果您向我们显示一个目录层次结构,其中显示了目标模块所在的位置以及您试图导入的模块所在的位置,那么我们可以帮助您创建一个相对路径,该路径不依赖于项目在驱动器上的安装位置。或者,如果您确实想要绝对,我们也可以演示如何进行绝对导入,但您尚未向我们展示硬盘上的任何内容,因此我们无法提供更具体的建议。这似乎不起作用。如果我使用它,我会得到一个错误找不到模块'C:\models\uploader.model.js'
,您是否将该文件保存在C:\models\uploader.model.js中?您的package.json文件的“type”:“module”
?不,package.json文件位于我的文档中的项目文件夹中。如果我导入时没有
,它会尝试从C://
获取模块,而模块不在它们所在的位置。package.json文件具有“类型”:“模块”
。您应该使用相对路径示例。/../uploader.model.js
。相对于包含该模型的文件。
"type": "module"