使用Typescript和Electron的Knex,使用Knex导致node_module错误

ymdaylpp  于 6个月前  发布在  Electron
关注(0)|答案(1)|浏览(84)

我有一个使用Typescript的工作Electron应用程序。这个main.ts文件用于主进程。

import { app, BrowserWindow } from 'electron';
import * as path from 'path';
import * as url from 'url';

// import knex from 'knex';
// import config from '../knexconfig';

// const db = knex(config);

let mainWindow: Electron.BrowserWindow | null;

async function init() {
    // db.select('*').from('users').then((rows) => {
    //     console.log(rows);
    // });

    createWindow();
}

function createWindow() {
    mainWindow = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        },
    });

    process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = '1';

    if (process.env.NODE_ENV === 'development') {
        mainWindow.loadURL(`http://localhost:4000`);
        mainWindow.webContents.openDevTools();
    } else {
        mainWindow.loadURL(
            url.format({
                pathname: path.join(__dirname, 'index.html'),
                protocol: 'file:',
                slashes: true
            })
        );
    }

    mainWindow.on('closed', () => {
        mainWindow = null;
    });
}

app.on('ready', init);

字符串
现在有6行注解在顶部。正如我所说,它的作品,因为我现在显示它。但当我添加这些注解的代码,我得到10错误,是这样的:
“找不到模块。无法解析...在...\node_modules\knex\lib\dialects中...”
所有错误详细信息:

ERROR in ./node_modules/knex/lib/dialects/better-sqlite3/index.js 7:11-36
Module not found: Error: Can't resolve 'better-sqlite3' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\better-sqlite3'
 @ ./node_modules/knex/lib/dialects/index.js 6:26-53
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/mssql/index.js 94:16-34
Module not found: Error: Can't resolve 'tedious' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\mssql'
 @ ./node_modules/knex/lib/dialects/index.js 8:15-33
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/mysql2/index.js 15:11-28
Module not found: Error: Can't resolve 'mysql2' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\mysql2'
 @ ./node_modules/knex/lib/dialects/index.js 10:16-35
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/oracledb/index.js 37:21-40
Module not found: Error: Can't resolve 'oracledb' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\oracledb'
 @ ./node_modules/knex/lib/dialects/index.js 12:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/oracledb/utils.js 40:19-38
Module not found: Error: Can't resolve 'oracledb' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\oracledb'
 @ ./node_modules/knex/lib/dialects/oracledb/index.js 16:4-22
 @ ./node_modules/knex/lib/dialects/index.js 12:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/pgnative/index.js 13:11-31
Module not found: Error: Can't resolve 'pg' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\pgnative'
 @ ./node_modules/knex/lib/dialects/index.js 13:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/postgres/index.js 63:11-24
Module not found: Error: Can't resolve 'pg' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\postgres'
 @ ./node_modules/knex/lib/dialects/index.js 14:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/postgres/index.js 192:8-34
Module not found: Error: Can't resolve 'pg-query-stream' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\postgres'
 @ ./node_modules/knex/lib/dialects/index.js 14:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/redshift/index.js 44:11-24
Module not found: Error: Can't resolve 'pg' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\redshift'
 @ ./node_modules/knex/lib/dialects/index.js 15:18-39
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

ERROR in ./node_modules/knex/lib/dialects/sqlite3/index.js 42:11-29
Module not found: Error: Can't resolve 'sqlite3' in 'C:\Users\timom\WebstormProjects\am-calendar\node_modules\knex\lib\dialects\sqlite3'
 @ ./node_modules/knex/lib/dialects/index.js 16:17-37
 @ ./node_modules/knex/lib/knex-builder/internal/config-resolver.js 5:36-61
 @ ./node_modules/knex/lib/knex-builder/Knex.js 7:26-63
 @ ./node_modules/knex/lib/index.js 1:13-43
 @ ./node_modules/knex/knex.js 8:13-35
 @ ./electron/main.ts 8:0-24 10:9-13

10 errors have detailed information that is not shown.
Use 'stats.errorDetails: true' resp. '--stats-error-details' to show it.

webpack 5.89.0 compiled with 10 errors and 2 warnings in 1270 ms


两个错误说我缺少postgres和sqlite3,但我使用mysql作为数据库类型(我也在配置中指定)另一方面,一个错误告诉我我缺少mysql,我已经安装。
这是运行electron应用程序的配置文件:

const path = require('path');

module.exports = {
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    devtool: 'source-map',
    entry: './electron/main.ts',
    target: 'electron-main',
    module: {
        rules: [
            {
                test: /\.(js|ts|tsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                },
            }
        ],
    },
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: '[name].js',
    },
};


这就是package.json

{
  "name": "am-calendar",
  "version": "1.0.0",
  "description": "",
  "main": "./dist/main.js",
  "scripts": {
    "dev:electron": "cross-env NODE_ENV=development webpack --config webpack.electron.config.js --mode development && electron .",
    "dev:react": "cross-env NODE_ENV=development webpack-dev-server --config webpack.react.config.js --mode development"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/plugin-proposal-decorators": "^7.23.3",
    "@babel/preset-react": "^7.23.3",
    "@types/node": "^20.10.0",
    "electron": "^27.1.0",
    "file-loader": "^6.2.0",
    "html-webpack-plugin": "^5.5.3",
    "ts-loader": "^9.5.1",
    "typescript": "^5.3.2",
    "url-loader": "^4.1.1"
  },
  "dependencies": {
    "@babel/core": "^7.23.3",
    "@babel/preset-env": "^7.23.3",
    "@babel/preset-typescript": "^7.23.3",
    "@types/react": "^18.2.38",
    "@types/react-dom": "^18.2.17",
    "babel-loader": "^9.1.3",
    "cross-env": "^7.0.3",
    "knex": "^3.0.1",
    "mysql": "^2.18.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "webpack": "^5.89.0",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^4.15.1"
  }
}

wbrvyc0a

wbrvyc0a1#

我发现了这篇文章https://github.com/knex/knex/issues/1128,并按照建议将其添加到我的电子配置中

externals: {
  knex: 'commonjs knex'
}

字符串
现在的配置看起来像这样(它的工作原理):

const path = require('path');

module.exports = {
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    devtool: 'source-map',
    entry: './electron/main.ts',
    target: 'electron-main',
    module: {
        rules: [
            {
                test: /\.(js|ts|tsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                },
            }
        ],
    },
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: '[name].js',
    },
    externals: {
        knex: 'commonjs knex'
    }
};

相关问题