JavaScript报错:Identifier 'pkg'已声明,Micro:Bit音乐遥控器代码求助
修复
SyntaxError: Identifier 'pkg' has already been declared 错误 错误成因
这个错误的核心是你重复使用了pkg这个变量名。在ES6模块语法中,import声明的变量属于块级作用域,同一个作用域内不允许存在重名变量。你先后从serialport和spotify-web-helper两个库导入时,都用了pkg作为接收变量,这直接触发了语法冲突。
修复方案
给不同库的导入变量起唯一名称,或者直接解构导入需要的模块成员,既避免冲突又简化代码。以下是修正后的完整代码,同时修复了其他潜在问题:
// 直接解构导入所需成员,避免重复变量名 import { SerialPort, ReadlineParser } from 'serialport'; import { SpotifyWebHelper } from 'spotify-web-helper'; const spotify = SpotifyWebHelper({'port': 4381}); const port = new SerialPort({ // Windows路径需转义反斜杠,或改用正斜杠 path: 'C:\\Users\\Splat\\Downloads\\SpotBit\\spotbit', baudRate: 115200, autoOpen: false }); // serialport v10+版本中,Readline已更名为ReadlineParser const parser = new ReadlineParser(); port.pipe(parser); spotify.player.on('ready', () => { console.log("Spotify è pronto!") port.open(() => { console.log("Port aperto"); parser.on('data', (data) => { console.log('Content ricevuto: ' + data.toString()); processData(data); }); }); function processData(data) { // 修正原逻辑:pause(true)是暂停,false是播放 const cmd = data.toString().trim(); if (cmd === 'PLAY') { spotify.player.pause(false); } else if (cmd === 'PAUSE') { spotify.player.pause(true); } } });
额外注意点
- 路径转义:Windows系统下的路径反斜杠
\必须写成\\,否则会被当作转义字符处理,导致路径识别失败。 - 模块版本适配:serialport v10及以上版本中,原
Readline解析器已改名为ReadlineParser,需对应调整导入和实例化代码。 - 逻辑修正:原代码中
PLAY和PAUSE的处理逻辑完全颠倒,已同步修正。
内容的提问来源于stack exchange,提问作者user21236734
相关产品推荐
相关产品推荐

