我正在尝试将我的 package.json 设置为模块来运行节点 14:
"type": "module",
Run Code Online (Sandbox Code Playgroud)
如果我在打字稿文件上运行此命令:
node --loader ts-node/esm.mjs --experimental-top-level-await ./src/scripts/ts-build.ts --trace-warnings --experimental-json-modules
Run Code Online (Sandbox Code Playgroud)
我在打字稿文件中有这样的无扩展导入
import { logger } from './logger';
Run Code Online (Sandbox Code Playgroud)
我明白了
ERR_MODULE_NOT_FOUND
但如果我把它改成
import { logger } from './logger.js';
Run Code Online (Sandbox Code Playgroud)
有用。
为什么是这样?
Node 现在内置了对导入的支持,这非常棒。但该支持要求您指定文件扩展名,这很烦人。
我确信这是有一定道理的(可能与他们对扩展的奇怪痴迷有关.mjs),但是有什么方法可以解决它并让import工作“像平常一样”(你可以停止.js)?
我正在尝试处理 Node 和 ES 模块。特别是如何/是否可以从导入语句的路径字符串值中省略文件扩展名(并且可以选择让 VSCode 自动完成这些路径)。
我知道您可以为文件提供.mjs扩展名或"type" = "modules"在其中设置,package.json但这两种方法都会导致以下问题。
.mjs,VSCode 不会自动完成路径,如果文件扩展名为.js. 但是,如果是.js自动完成,则会从字符串中省略扩展名,并且导入将失败,直到我手动添加它为止。graphql在我自己的模块中使用类似的库也失败了,因为.mjsgraphql 模块中文件之间的所有导入语句都被写入省略了字符串中的扩展名。所以...什么时候不包括对 ES6 模块导入有效的扩展,并且无论如何都可以通过 NodeJS 启用此条件?
我正在尝试使用 ES6 语法将 express 导入我的项目,但它一直给我错误:
import express from "express";
SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现人们说要添加的地方:
“类型”:“模块”
到我已经完成的 package.json 文件:
...
"description": "Shopping list to learn the MERN stack",
"type": "module",
"main": "server.js",
"scripts": {
"start": "node server.js",
"server": "nodemon server.js"
},
...
Run Code Online (Sandbox Code Playgroud)
But I'm still getting the same issue. I would prefer to use the import ES6 syntax rather than this syntax.
const express = require('express')
Run Code Online (Sandbox Code Playgroud)