ci010 / electron-vue-next

A starter template for using vue-next with the electron.
https://ci010.github.io/electron-vue-next/
191 stars 27 forks source link

无法成功引入knex #67

Closed aojiaoshou666 closed 3 years ago

aojiaoshou666 commented 3 years ago

版本: "knex": "^0.95.6", "sqlite3": "^5.0.2"

在preload路径下新建了DBClient.ts文件

import knex, { Knex } from 'knex'
import DBConfig from '../db/config'

let _instance: Knex
function init() {
  if (!_instance) {
    _instance = knex(DBConfig)
  }
  return _instance
}

const DBClient = {
  getInstance: function() {
    return init()
  }
}
export default DBClient

npm run dev,rollup build时报错: { code: 'ERROR', error: [Error: Could not load /Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js.ts (imported by /Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js?commonjs-proxy): ENOENT: no such file or directory, open '/Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js.ts'] { errno: -2, code: 'ENOENT', syscall: 'open', path: '/Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js.ts', watchFiles: [ '/Users/wu/Work/2021/nova_beta/src/main/index.dev.ts', 'vue-devtools', '/Users/wu/Work/2021/nova_beta/src/main/index.ts', '/Users/wu/Work/2021/nova_beta/static/logo.png?static', '/Users/wu/Work/2021/nova_beta/src/renderer/index.html?renderer', '/Users/wu/Work/2021/nova_beta/src/preload/index?preload', './workers/index?worker&importer=/Users/wu/Work/2021/nova_beta/src/main/index.ts', '/Users/wu/Work/2021/nova_beta/src/main/dialog.ts', '/Users/wu/Work/2021/nova_beta/src/main/logger.ts', '/Users/wu/Work/2021/nova_beta/src/preload/index.ts', '/Users/wu/Work/2021/nova_beta/src/main/workers/index.ts', '/Users/wu/Work/2021/nova_beta/src/main/services/index.ts', '/Users/wu/Work/2021/nova_beta/src/main/services/FooService.ts', '/Users/wu/Work/2021/nova_beta/src/preload/dataInputsAPIs/index.ts', '/Users/wu/Work/2021/nova_beta/src/main/services/Service.ts', '/Users/wu/Work/2021/nova_beta/src/main/services/BaseService.ts', '/Users/wu/Work/2021/nova_beta/src/preload/dbClient.ts', '/Users/wu/Work/2021/nova_beta/src/shared/sharedLib.ts', '/Users/wu/Work/2021/nova_beta/src/db/config.ts', '/Users/wu/Work/2021/nova_beta/node_modules/knex/knex.js', '\x00/Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js?commonjs-proxy', '/Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js', '/Users/wu/Work/2021/nova_beta/node_modules/knex/lib/index.js.ts' ] }, result: null }

knex内部是js写的,没有ts文件的引用,rollup这里却要引入相应的ts文件

aojiaoshou666 commented 3 years ago

Issue fixed. It turned out in my project I could only successfully import knex through commonJS require. However, the types knex declared could be imported using ES6 or TS import syntax. Below is the working code.

import { Knex } from 'knex'
const knex = require('knex') // has to use commonJS require here
import DBConfig from '../db/config'

let _instance: Knex
function init() {
  if (!_instance) {
    _instance = knex(DBConfig)
  }
  return _instance
}

const DBClient = {
  getInstance: function() {
    return init()
  }
}
export default DBClient