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
相关产品推荐
相关产品推荐

