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

如何配置在执行npm i时自动播放Jeopardy加载音乐?

解决方案:实现npm i时自动播放《Jeopardy》主题曲

先排查现有问题

你的当前实现存在几个核心问题:

  • 包的package.json里存在循环依赖(dependencies中包含自身jeopardy-loading),会导致npm安装失败
  • 使用了postinstall钩子,该钩子是在当前包安装完成后执行,而你需要的是在npm i整个过程开始时触发音乐播放
  • 音频文件使用相对路径,在不同执行目录下可能找不到资源

方案1:全局生效(所有npm i都自动播放)

步骤1:修复你的jeopardy-loading包

  1. 修改package.json,移除循环依赖:
    {
      "name": "jeopardy-loading",
      "version": "1.0.1",
      "description": "Plays 'Final Jeopardy' song",
      "main": "index.js",
      "scripts": {
        "start": "node final-jeopardy.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [
        "jeopardy",
        "final-jeopardy",
        "audio"
      ],
      "author": "dsatpm",
      "license": "MIT",
      "dependencies": {
        "play-sound": "^1.1.6"
      }
    }
    
  2. 修正音频文件路径问题,用绝对路径避免找不到文件:
    const Player = require('play-sound');
    const path = require('path');
    const player = new Player();
    
    // 用__dirname获取当前脚本所在目录的绝对路径
    const jeopardy = path.join(__dirname, './final-jeopardy.wav');
    
    player.play(jeopardy, (err) => {
      if (err) {
        console.error('Error playing song:', err);
      }
    });
    
  3. 重新发布修正后的包(更新版本号避免缓存问题)

步骤2:配置全局npm钩子

npm支持全局脚本钩子,利用preinstall(安装所有依赖前执行)实现需求:

  1. 执行命令指定全局初始化脚本:
    npm config set init-module ~/.npm-init.js
    
  2. 创建~/.npm-init.js文件,添加内容:
    module.exports = {
      scripts: {
        preinstall: 'npx jeopardy-loading'
      }
    };
    

之后每次执行npm i,都会先触发全局preinstall钩子,调用你的包播放音乐。


方案2:项目级生效(仅特定项目触发)

如果不需要全局生效,只在单个项目中实现:

  1. 确保你的jeopardy-loading包已完成上述修复并发布
  2. 在目标项目的package.json中添加:
    {
      "scripts": {
        "preinstall": "npx jeopardy-loading"
      }
    }
    

注意:如果项目没有package.json,先执行npm init -y生成。


关键注意事项

  • 系统音频依赖:play-sound需要系统自带音频播放器支持(Windows的wmplayer、macOS的afplay、Linux的aplay),若用户系统缺失这些工具,播放会失败,可在代码中添加容错提示
  • 钩子时机:preinstall是唯一符合"npm i开始时触发"需求的钩子,postinstall时机太晚,不适用
  • 避免缓存:发布包时务必更新版本号,否则用户可能获取不到修复后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:15:17