【问题标题】:SyntaxError: The requested module 'sqlite' does not provide an export named 'default'SyntaxError:请求的模块“sqlite”不提供名为“default”的导出
【发布时间】:2021-05-04 23:07:53
【问题描述】:

我在尝试导入 sqlite 时遇到问题,我添加以下行:

import sqlite from 'sqlite';

我收到以下错误

file:///D:/WebPro/WebProg/cwCode/dbInteract.js:2
import sqlite from 'sqlite';
       ^^^^^^
SyntaxError: The requested module 'sqlite' does not provide an export named 'default'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:105:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:151:5)
    at async Loader.import (node:internal/modules/esm/loader:166:24)
    at async Object.loadESM (node:internal/process/esm_loader:68:5)
npm ERR! code 1
npm ERR! path D:\WebPro\WebProg\cwCode
npm ERR! command failed
npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node svr.js

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Rory\AppData\Local\npm-cache\_logs\2021-05-04T13_37_27_066Z-debug.log
PS D:\WebPro\WebProg\cwCode>

在将package.json中的type改成'module'之前没有这个问题

如果我那么改变就是

import sqlite from 'sqlite3';

我得到了这个错误

file:///D:/WebPro/WebProg/cwCode/svr.js:4
const express = require('express');
                ^

ReferenceError: require is not defined
    at file:///D:/WebPro/WebProg/cwCode/svr.js:4:17
    at ModuleJob.run (node:internal/modules/esm/module_job:154:23)
    at async Loader.import (node:internal/modules/esm/loader:166:24)
    at async Object.loadESM (node:internal/process/esm_loader:68:5)
npm ERR! code 1
npm ERR! path D:\WebPro\WebProg\cwCode
npm ERR! command failed
npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node svr.js

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Rory\AppData\Local\npm-cache\_logs\2021-05-04T13_44_05_322Z-debug.log
PS D:\WebPro\WebProg\cwCode> 

【问题讨论】:

    标签: javascript node.js sqlite npm


    【解决方案1】:

    使用 ESM 模块,有两种导出功能的方法:作为默认导出或命名导出。导入这些功能的方式首先取决于它们的实际导出方式。

    import defaultExport from 'module1'                  // Import default export 
    import { namedExport1, namedExport2 } from 'module2' // Import named exports
    

    请注意,一个模块实际上可能同时具有默认导出和命名导出,或者只是其中之一。

    即使它们是同一个数据库的库,sqlitesqlite3 包显然只是以不同的方式导出它们的 api - 更具体地说,sqlite 似乎没有默认导出。

    此外,当您将 package.json type 键设置为 module 时,您会指示 node 使用 ESM 模块系统加载您的程序。该系统没有定义require() 函数——它是由另一个node.js 主流模块系统CommonJS 定义的。您应该在这里坚持使用import 语法。

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 2020-03-05
      • 2021-11-02
      • 2022-01-25
      • 2022-11-16
      • 2022-10-17
      • 2021-12-11
      • 2023-02-02
      • 2021-10-03
      相关资源
      最近更新 更多