Babel 不允许没有 .js 文件扩展名的导入
Babel not allowing imports without .js file extension
我已经安装了 babel,现在可以使用导入语法了。但是,此代码 import { dbConnect } from './utils/dbConnect.js';
有效,但此代码 import { dbConnect } from './utils/dbConnect';
无效。
我一直在网上搜索几个小时,据我所知,这个功能应该在我已经安装的@babel/preset-env 中自动启用。
这是我的依赖项:
"dependencies": {
"@babel/core": "^7.14.6",
"@babel/node": "^7.14.5",
"@babel/preset-env": "^7.14.5",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"mongoose": "^5.12.14",
"nodemon": "^2.0.7"
},
"devDependencies": {
"eslint": "^7.28.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.23.4"
}
我目前没有 .babelrc
文件。
这是错误:
internal/process/esm_loader.js:74
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/me/Repositories/myrepo/server/utils/dbConnect' imported from /Users/me/Repositories/myrepo/server/index.js
Did you mean to import ../utils/dbConnect.js?
at finalizeResolution (internal/modules/esm/resolve.js:276:11)
at moduleResolve (internal/modules/esm/resolve.js:699:10)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
at Loader.resolve (internal/modules/esm/loader.js:88:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:241:28)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
at link (internal/modules/esm/module_job.js:55:36) {
code: 'ERR_MODULE_NOT_FOUND'
如果您通过 "type": "module"
或 .mjs
使用 Node 的内置 ES 模块支持,那么您选择了更严格的要求。 Node requires you to explicitly provide file extensions 作为其中的一部分。
Babel 的官方插件没有任何添加扩展的逻辑,因为这与 language/specification 的 ECMAScript 没有真正的关系。您可以将用户视为社区插件,例如 https://www.npmjs.com/package/babel-plugin-add-import-extension,它似乎支持您正在寻找的内容。
我最终启用了不带文件扩展名的导入,如下所示:
--experimental-modules --es-module-specifier-resolution=node
添加到节点,而 运行 我的应用程序。
我的启动脚本现在是:"start": "nodemon --exec babel-node --require dotenv/config --experimental-modules --es-module-specifier-resolution=node index.js"
我已经安装了 babel,现在可以使用导入语法了。但是,此代码 import { dbConnect } from './utils/dbConnect.js';
有效,但此代码 import { dbConnect } from './utils/dbConnect';
无效。
我一直在网上搜索几个小时,据我所知,这个功能应该在我已经安装的@babel/preset-env 中自动启用。 这是我的依赖项:
"dependencies": {
"@babel/core": "^7.14.6",
"@babel/node": "^7.14.5",
"@babel/preset-env": "^7.14.5",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"mongoose": "^5.12.14",
"nodemon": "^2.0.7"
},
"devDependencies": {
"eslint": "^7.28.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.23.4"
}
我目前没有 .babelrc
文件。
这是错误:
internal/process/esm_loader.js:74
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/me/Repositories/myrepo/server/utils/dbConnect' imported from /Users/me/Repositories/myrepo/server/index.js
Did you mean to import ../utils/dbConnect.js?
at finalizeResolution (internal/modules/esm/resolve.js:276:11)
at moduleResolve (internal/modules/esm/resolve.js:699:10)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
at Loader.resolve (internal/modules/esm/loader.js:88:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:241:28)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
at link (internal/modules/esm/module_job.js:55:36) {
code: 'ERR_MODULE_NOT_FOUND'
如果您通过 "type": "module"
或 .mjs
使用 Node 的内置 ES 模块支持,那么您选择了更严格的要求。 Node requires you to explicitly provide file extensions 作为其中的一部分。
Babel 的官方插件没有任何添加扩展的逻辑,因为这与 language/specification 的 ECMAScript 没有真正的关系。您可以将用户视为社区插件,例如 https://www.npmjs.com/package/babel-plugin-add-import-extension,它似乎支持您正在寻找的内容。
我最终启用了不带文件扩展名的导入,如下所示:
--experimental-modules --es-module-specifier-resolution=node
添加到节点,而 运行 我的应用程序。
我的启动脚本现在是:"start": "nodemon --exec babel-node --require dotenv/config --experimental-modules --es-module-specifier-resolution=node index.js"