我正在使用 Node.js v14.13.0。
app.js 文件:
import database from './database';
database();
数据库/index.js文件:
import mongoose from 'mongoose';
export default connect = async () => {
try {
await mongoose.connect('...', { });
} catch (error) {}
};
在 package.json 我添加了
"type": "module"
。
运行应用程序后,我收到以下错误:
错误 [ERR_UNSUPPORTED_DIR_IMPORT]:目录导入 '/Users/xx/Desktop/Projects/node-starter/src/database' 不是 支持解析从以下位置导入的 ES 模块 /Users/xx/Desktop/Projects/node-starter/src/app.js
使用 ES6 模块,您(还?)无法导入目录。您的导入应该如下所示:
import database from "./database/index.js"
这里发生的是 Node mandates 在
import
语句中使用扩展,并且还声明,
还必须完整指定目录索引(例如
)。'./startup/index.js'
您的
import database from './database';
语句未指定 index.js
。您可以按照另一个答案中的建议添加 index.js
,但是当您最终从 .js
文件导入 .ts
文件时,这种方法在 TypeScript 项目中看起来并不优雅。您可以通过传递 --experimental-specifier-resolution=node
flag来更改此节点扩展解析行为。这将起作用并将保持您的代码不变: app.js
import database from './database';
database();
运行方式:
node --experimental-specifier-resolution=node app.js
。
一位 Node 开发人员承认文档不太清楚在这里你可以看到我做了这个更改,它对我有用,这是我下面的两个文件,我需要编写 require 来导入用户,但在 ES6 中它不支持 require,所以在我的解决方案中我创建了导出默认值users 并且它带有sequelize 和 datatypes 值,所以现在我在index.js 文件中创建了上面的用户导入,这样我就可以在不使用 require 的情况下使用这些值。
您还必须在导入的文件路径中添加(.js)扩展名,就像我在index.js文件第二行中所做的那样。
您的导入应如下所示:
索引.js
import { DataTypes, Sequelize } from "sequelize";
**import Users from "./users.js";**
const sequelize = new Sequelize("Users", "root", "", {
host: "localhost",
dialect: "mysql",
pool: { max: 5, min: 0, idle: 10000 },
});
sequelize
.authenticate()
.then(() => {
console.log("Connected !");
})
.catch((err) => {
console.log("Error", err);
});
const db = {};
db.sequelize = Sequelize;
db.sequelize = sequelize;
**db.users = Users(sequelize, DataTypes);**
db.sequelize.sync().then(() => {
console.log("YES Re-Sync !");
});
export default sequelize;
用户.js
const Users = (sequelize, DataTypes) => {
sequelize.define(
"Users",
{
name: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
defaultValue: "[email protected]",
},
gender: {
type: DataTypes.STRING,
},
},
{
// timestamps: false,
// updatedAt: false,
// createdAt: false,
// createdAt: created_at,
// updatedAt: modified_at,
// engine: "Kishan",
}
`);
};
export default Users;
必须将依赖项从devDependencies
移至
dependencies
。这当然不适合所有用例,但在您的特定上下文中仍然可能有意义。这解决了我的问题:
// Before
"devDependencies": {
"third-party-lib": "version"
}
// After
"dependencies": {
"third-party-lib": "version"
}
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.6.1"
}
虽然可能是旧版本,但你可以使用最新版本。