1***@qq.com
1***@qq.com
  • 发布:2026-02-09 15:09
  • 更新:2026-02-09 15:09
  • 阅读:60

uniapp 小程序项目编译打包或者dev编译运行的时候,有没有办法触发一个js脚本?

分类:uni-app

问题描述:如题。
背景:在开发小说类小程序,这个项目想要适配多端小程序平台,微信和抖音。其中抖音小程序的小说插件需要手动在编译好的项目中的 package.json 文件中加入 "industrySDK": true 的配置(参考文档:https://partner.open-douyin.com/docs/resource/zh-CN/mini-app/develop/tutorial/open-capabilities/industry-ability/industrySDK)。所以我就在想能不能实现用脚本来写入这个配置,而不是每次都手动加上这句话。

2026-02-09 15:09 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

可以,uni-app 在编译(dev 或 build)阶段允许通过「自定义脚本」或「条件编译」机制自动修改产物,满足“打包时自动给抖音小程序产物写入 industrysdk: true”的需求。下面给出两种官方支持的做法,你任选其一即可。


做法一:在 package.json 里扩展「抖音小说」子平台
(推荐,最干净,不会破坏其它平台产物)

  1. 在源码根目录的 package.json 中新增 uni-app 扩展节点:
{  
  "uni-app": {  
    "scripts": {  
      "mp-toutiao-novel": {  
        "title": "抖音小说小程序",  
        "env": {  
          "UNI_PLATFORM": "mp-toutiao"  
        },  
        "define": {  
          "MP-TOUTIAO-NOVEL": true  
        }  
      }  
    }  
  }  
}
  1. 在根目录新建 /scripts/fix-toutiao-novel.js(名字随意):
// 编译结束后给抖音产物写入 industrysdk 字段  
const fs = require('fs');  
const path = require('path');  

// uni-app 会把产物放在 unpackage/dist/build/mp-toutiao  
const pkgPath = path.resolve(__dirname, '../unpackage/dist/build/mp-toutiao/package.json');  
if (!fs.existsSync(pkgPath)) return;  

const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));  
pkg.industrySDK = true;  
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));  
console.log('✅ 已为抖音小说小程序写入 industrySDK=true');
  1. 把脚本挂到编译流程。
    如果你用 HBuilderX:

    • 打开「工具 → 外部命令配置」→ 新增一条
    • 命令填写 node scripts/fix-toutiao-novel.js
    • 触发时机选「编译完成后」即可。

    如果你用 CLI:
    在 package.json 的 scripts 里加一行:

"build:mp-toutiao-novel": "cross-env NODE_ENV=production uni build --platform mp-toutiao && node scripts/fix-toutiao-novel.js"

以后执行 npm run build:mp-toutiao-novel 即可一次性完成编译 + 自动写入。


做法二:直接利用 vue.config.js / vite.config.js 的「writeBundle」钩子
(适合同时做其它产物处理)

以 vite 为例(vue-cli 同理,用 chainWebpack):

// vite.config.js  
import { defineConfig } from 'vite';  
import uni from '@dcloudio/vite-plugin-uni';  
import { writeFileSync } from 'fs';  

export default defineConfig({  
  plugins: [  
    uni(),  
    {  
      name: 'toutiao-novel-post-process',  
      writeBundle(options, bundle) {  
        // 只在 mp-toutiao 产物目录触发  
        if (options.dir.includes('mp-toutiao')) {  
          const pkgPath = `${options.dir}/package.json`;  
          const pkg = require(pkgPath);  
          pkg.industrySDK = true;  
          writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));  
          console.log('✅ 抖音产物已写入 industrySDK=true');  
        }  
      }  
    }  
  ]  
});

注意事项

  • 产物目录默认是 unpackage/dist/build/mp-toutiao;如果你改过 outputDir,脚本里同步调整即可。
  • 微信、支付宝等其它平台不会受到任何影响。
  • 如果后续官方把 industrySDK 做成 manifest.json 的可配置项,就可以直接配而不用脚本了,目前仍需手动写入。

这样每次 dev 或 build 都会自动完成「加字段」的动作,无需再手动修改。

内容为 AI 生成,仅供参考

要回复问题请先登录注册