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

Node.js serialport模块报错:TypeError: SerialPort.list is not a function

解决SerialPort.list is not a function错误

这个错误的核心原因是serialport模块版本差异,v10及以上版本对list方法的导出和调用逻辑做了大幅调整,不再是SerialPort类的静态方法。以下是具体的解决方法:


1. 先确认你的serialport版本

执行命令查看当前安装的版本:

npm list serialport

2. 针对v10+版本的正确写法

新版本中list是独立导出的异步函数,返回Promise,同时端口对象的标识字段从comName改为了path:

CommonJS写法

const { list } = require('serialport');

async function getPortsList() {
  try {
    const ports = await list();
    // 提取端口路径
    return ports.map(port => port.path);
  } catch (err) {
    throw err;
  }
}

// 调用示例
getPortsList()
  .then(portsList => console.log('已连接串口:', portsList))
  .catch(err => console.error('获取串口列表失败:', err));

ES模块写法(如果你的项目用ESModule)

import { list } from 'serialport';

async function getPortsList() {
  try {
    const ports = await list();
    return ports.map(port => port.path);
  } catch (err) {
    throw err;
  }
}

3. 如果你需要用回调风格(适配旧习惯或特定场景)

可以用Node.js内置的util.promisify把Promise转换为回调形式:

const { list } = require('serialport');
const { promisify } = require('util');
const listPorts = promisify(list);

function getPortsList(callback) {
  listPorts()
    .then(ports => callback(null, ports.map(port => port.path)))
    .catch(err => callback(err));
}

// 调用示例
getPortsList((err, portsList) => {
  if (err) {
    console.error('出错了:', err);
    return;
  }
  console.log('串口列表:', portsList);
});

4. 如果是v9及以下旧版本的问题

旧版本中list确实是SerialPort的静态方法,但要确保你正确导入了SerialPort类:

const SerialPort = require('serialport');

function getPortsList(callback) {
  SerialPort.list((err, ports) => {
    if (err) return callback(err);
    const portsList = ports.map(port => port.comName);
    callback(null, portsList);
  });
}

如果还是报错,建议卸载重装对应版本:

npm uninstall serialport
npm install serialport@9.x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:46:01