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

Next.js 14中无法使用lnurl npm库?技术问题求助

问题:Next.js 14中导入lnurl库触发语法错误

问题重现

  1. 新建Next.js 14初始项目,执行安装命令:
    npm i lnurl
    
  2. 在API路由(如src/app/api/auth/route.ts)中仅添加导入语句:
    import lnurl from 'lnurl'
    
  3. 触发以下语法错误:

    ⨯ ./node_modules/lnurl/lib/subprotocols/channelRequest.js
    Error:
    × Cannot use a reserved word as a shorthand property
    ╭─[.../channelRequest.js:44:1]
    44 │ let { remoteid, localAmt, pushAmt, private } = params;
    · ───────
    × Expression expected
    × Expected ',', got 'private'
    Caused by: Syntax Error

注:该库在Next.js 13演示项目中可正常运行。

原因分析

private是JavaScript的保留字(作为类私有字段修饰符),lnurl库的channelRequest.js中直接将其用作解构赋值的变量名,而Next.js 14的编译环境(如SWC)启用了更严格的语法检查,导致触发错误。Next.js 13演示项目可运行可能是因为使用了旧版库或宽松的编译配置。

解决方案

方案1:用patch-package持久化修复库代码

  1. 安装patch-package:
    npm i patch-package --save-dev
    
  2. 找到node_modules/lnurl/lib/subprotocols/channelRequest.js,修改第44行的解构语句:
    // 原代码
    let { remoteid, localAmt, pushAmt, private } = params;
    // 修改为(用别名避开保留字)
    let { remoteid, localAmt, pushAmt, private: isPrivate } = params;
    
  3. 替换后续所有用到private的变量为isPrivate:
    // 第46行
    assert.ok(typeof isPrivate !== 'undefined', new HttpError('Missing required parameter: "private"', 400));
    // 第47行
    isPrivate = parseInt(isPrivate) === 1;
    
  4. 生成补丁文件:
    npx patch-package lnurl
    
  5. 在package.json的scripts中添加:
    "postinstall": "patch-package"
    
    确保每次npm install后自动应用补丁。

方案2:配置Next.js转译lnurl库

在next.config.js中添加转译配置,让Next.js处理库的语法兼容性:

/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['lnurl'],
}

module.exports = nextConfig

方案3:使用演示项目的lnurl版本

查看演示项目package.json中的lnurl版本,安装对应版本以避开问题:

npm i lnurl@<演示项目中的版本号>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:53:16