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

如何替换package.json脚本中已废弃的cpx包并解决相关报错

原脚本作用

你当前的scripts是基于已停止维护的cpx工具实现依赖包静态资源复制,具体逻辑如下:

  • dist命令:并行执行两个复制操作,把所有node_modules子目录下dist文件夹里的一级文件、所有嵌套层级的文件,全部复制到项目的Content/lib目录下,--v参数会在控制台输出所有复制操作的日志
  • media命令:和dist逻辑一致,只是复制的是所有node_modules子目录下media文件夹的所有文件
  • build命令:串行执行dist和media命令,完成所有静态资源的批量复制
报错原因

你替换为cpx2后出现的TypeError: Cannot read property 'name' of undefined报错,是由于cpx2依赖的高版本universalify包和你当前项目使用的低版本Node.js(一般是Node.js 8.x及更低版本)不兼容导致的,高版本universalify用到了旧版Node不支持的语法特性。

重构方案

你可以根据项目情况选以下任意一种方案重构:

方案1:最小改动修复兼容问题

锁定安装兼容旧版Node的cpx2及相关依赖版本,无需修改原有scripts逻辑:

  1. 执行安装命令:
    npm install cpx2@3.0.2 universalify@0.1.2 --save-dev
  2. 直接执行原有npm run build即可正常运行。

方案2:替换为维护更活跃的cpy-cli(语法接近cpx,改动量小)

cpy-cli是目前仍在活跃维护的同类文件复制工具,glob语法和cpx基本一致,且不需要写两条命令匹配一级和嵌套文件:

  1. 执行安装命令:
    npm install cpy-cli --save-dev
  2. 修改package.json的scripts配置为:
"scripts": {
    "dist": "cpy node_modules/**/dist/**/*.* Content/lib",
    "media": "cpy node_modules/**/media/**/*.* Content/lib",
    "build": "npm run dist && npm run media"
}

方案3:自定义脚本实现(长期维护更灵活,无第三方工具依赖风险)

如果不想依赖第三方CLI工具,可以自己写小脚本实现复制逻辑,后续调整规则也更方便:

  1. 先安装所需依赖:
    npm install fs-extra glob --save-dev
  2. 在项目根目录新建copy-assets.js文件,内容如下:
const fs = require('fs-extra')
const glob = require('glob')

async function runCopy() {
  // 复制dist目录所有文件
  const distFiles = glob.sync('node_modules/**/dist/**/*.*', { nodir: true })
  for (const filePath of distFiles) {
    const targetPath = filePath.replace(/^node_modules\/[^/]+\/dist\//, 'Content/lib/')
    await fs.copy(filePath, targetPath)
    console.log(`复制完成:${filePath} => ${targetPath}`)
  }
  // 复制media目录所有文件
  const mediaFiles = glob.sync('node_modules/**/media/**/*.*', { nodir: true })
  for (const filePath of mediaFiles) {
    const targetPath = filePath.replace(/^node_modules\/[^/]+\/media\//, 'Content/lib/')
    await fs.copy(filePath, targetPath)
    console.log(`复制完成:${filePath} => ${targetPath}`)
  }
}

runCopy().catch(err => {
  console.error('资源复制失败:', err)
  process.exit(1)
})
  1. 修改package.json的scripts配置为:
"scripts": {
  "build": "node copy-assets.js"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:04