You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PKI.JS报Cannot use import outside module错误的解决方法(TS+Node.js)

问题根本原因

你导入的是pkijs/src路径下未编译的ES模块源代码,而你的项目tsconfig配置输出格式为CommonJS,node运行时默认不会转译node_modules目录下的ES模块代码,因此会抛出SyntaxError: Cannot use import statement outside a module错误。

你之前尝试添加"type": "module"未生效,是因为该配置和tsconfig中的"module": "commonjs"不匹配,且Node12对ES模块的支持需要额外配置后缀、导入路径补全规则,整体改动成本过高,不优先推荐。

可行解决方案

方案1(优先推荐):修改导入路径

PKIJS主入口已经预编译了兼容CommonJS的代码,且所有核心类都在主入口做了统一导出,你只需要把原有导入语句:

/// <reference types="@types/pkijs" />
import OCSPResponse from "pkijs/src/OCSPResponse";

修改为从主入口直接导入即可:

import { OCSPResponse } from "pkijs";

修改完成后重新执行yarn build打包,即可正常运行。

方案2:配置打包工具转译PKIJS

如果你必须导入src下的单个模块来减小打包体积,可以修改打包配置,将pkijs加入转译范围:
如果你的serverless项目使用serverless-webpack插件,修改webpack配置文件的编译规则,把pkijs从node_modules排除列表中移除:

module.exports = {
  // 其余原有配置保持不变
  module: {
    rules: [
      {
        test: /\.(ts|js)$/,
        exclude: /node_modules\/(?!pkijs)/,
        use: ['ts-loader', 'babel-loader']
      }
    ]
  }
}

方案3:使用CommonJS语法导入

可以直接用require语法加载ES模块,注意ES模块的default导出需要额外取.default属性:

const OCSPResponse = require('pkijs/src/OCSPResponse').default;

内容的提问来源于stack exchange,提问作者AndresQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:45:08