我想将应用程序从app.js
导入到init.js
。
对我来说,显式地编写文件扩展名是可行的,但是省略它是不可行的。
"./app.js"
起作用✅"./app"
不起作用🛑但是我正在关注的教程可以运行"./app"
。那为什么它对我不起作用?
唯一不同的是在"type": "module"
中添加package.json
并由于更新的Babel节点使用而将.babelrc
命名为babel.config.json
。
node v13.60
"@babel/core": "^7.8.7",
"@babel/node": "^7.8.7",
"express": "^4.17.1"
Error: Cannot find module /Users/leochoo/dev/wetube/app imported from /Users/leochoo/dev/wetube/init.js
at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:100:13)
at Loader.resolve (internal/modules/esm/loader.js:72:33)
at Loader.getModuleJob (internal/modules/esm/loader.js:156:40)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
at link (internal/modules/esm/module_job.js:41:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
[nodemon] app crashed - waiting for file changes before starting...
// app.js
const app = express();
...
export default app; //share this to init
// init.js
import app from "./app.js";
// babel.config.json
{
"presets": ["@babel/preset-env"]
}
// package.json
{
"name": "wetube",
"version": "1.0.0",
"author": "Leonard Choo",
"dependencies": {
"@babel/core": "^7.8.7",
"@babel/node": "^7.8.7",
"body-parser": "^1.19.0",
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"helmet": "^3.21.3",
"morgan": "^1.9.1"
},
"scripts": {
"start": "nodemon --exec babel-node init.js --delay 2"
},
"devDependencies": {
"@babel/preset-env": "^7.8.7",
"nodemon": "^2.0.2"
},
"type": "module"
}
屏幕截图已搜寻也许this link与之相关?
https://babeljs.io/docs/en/babel-register
babel-node
在内部使用@babel/register
。 @babel/register
不支持即时编译本机Node.js ES模块,因为当前没有稳定的API来拦截ES模块的加载。
因此,目前无法同时使用@babel/register
和ES modules
。(type: module
将使您的nodejs将每个js文件都视为ES module
)