Skip to content
/ mix Public

The streaming build system based on Middleware

License

Notifications You must be signed in to change notification settings

sobird/mix

Repository files navigation

mix

The streaming build system based on Middleware

sequelize

nextjs 使用 sequelize 终端会报下面的错误(但不影响程序运行):

Critical dependency: the request of a dependency is an expression

Import trace for requested module:
./node_modules/sequelize/lib/dialects/abstract/connection-manager.js
./node_modules/sequelize/lib/dialects/mariadb/connection-manager.js
./node_modules/sequelize/lib/dialects/mariadb/index.js
./node_modules/sequelize/lib/sequelize.js
./node_modules/sequelize/lib/index.js
./node_modules/sequelize/lib/index.mjs
./models/userRole.ts
./models/index.ts
./app/dashboard/role/create/action.ts

在网上有人通过下面的方式给出了解决上面报错的方案:

// 在next.config.js 文件中添加如下配置

const nextConfig = {
  experimental: {
    serverComponentsExternalPackages: ['sequelize'],
  },
};

module.exports = nextConfig;

经本人测试虽然解决了上面的问题,但是在使用nextjs的server actions时报错,发现lib中导入的sequelize为undefined(SyntaxError: Unexpected identifier)引起了js错误(影响程序运行)。

处罚上面错误的条件是:所使用的action文件没有在其page.ts文件中导入,如果在page.ts文件中进行一次导入,则不会报错。

最终有一种解决方式是,用require代替import导入sequelize。

// import { Sequelize } from 'sequelize';
const sequelize = require('sequelize')

这种虽然兼顾了上面的两个问题,但是sequelize的ts类型推导失效,编写操作模型时会感到不方便。

完美解决方案

  1. 修改package.json文件的type
{
  "type": "module",
}
  1. 修改next.config.js配置
const nextConfig = {
  experimental: {
    esmExternals: false,
    serverComponentsExternalPackages: ['sequelize'],
  },
}

export default nextConfig;

prisma

yarn add prisma

# 创建prisma目录,并将SQLite配置为数据库
npx prisma init --datasource-provider sqlite

id vs cuid vs uuid ?

casl

About

The streaming build system based on Middleware

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published