uni-app小程序使用monorepo管理项目时,自定义依赖包修改内容无法触发编译

发布于 1周前 作者 yuanlaile 来自 uni-app

uni-app小程序使用monorepo管理项目时,自定义依赖包修改内容无法触发编译
修改store包或其他包下的代码无法触发编译,需要手动修改对应项目的代码保存后才能触发编译

图片

2 回复

现在解决了不


在uni-app小程序项目中采用monorepo架构管理多个子包时,确保自定义依赖包修改后能触发编译是一个关键问题。为了实现这一目标,通常我们需要结合一些工具和配置来监听依赖包的变化并触发重新编译。以下是一个基于pnpmlerna(或yarn workspaces)的monorepo项目结构,以及使用huskywebpack(或vite)等工具来实现自动编译的解决方案示例。

项目结构

my-monorepo/
├── packages/
│   ├── common/  # 自定义依赖包
│   │   ├── src/
│   │   ├── package.json
│   ├── app/     # uni-app项目
│       ├── pages/
│       ├── static/
│       ├── manifest.json
│       ├── package.json
├── package.json
├── lerna.json  # 使用lerna管理monorepo
├── .husky/      # husky配置用于git hooks
│   └── pre-commit
├── webpack.config.js  # webpack配置(如果使用webpack)

自定义依赖包修改触发编译

  1. 安装依赖

    确保安装了lernapnpm(或yarn)、husky等依赖。

    npm install -g lerna pnpm
    cd my-monorepo
    pnpm install
    
  2. 配置lerna

    lerna.json中配置项目结构:

    {
      "version": "0.0.0",
      "packages": [
        "packages/*"
      ]
    }
    
  3. 使用husky监听文件变化

    配置.husky/pre-commit脚本,使用lerna run build或其他命令来编译依赖包。

    #!/bin/sh
    . "$(dirname "$0")/_/husky.sh"
    
    cd packages/common
    pnpm run build  # 假设common包有build脚本
    cd ../../
    
    # 重新编译uni-app项目
    cd packages/app
    pnpm run dev  # 或者使用uni-app的特定命令如uni-app-cli serve
    
  4. 在uni-app项目中引用本地包

    packages/app/package.json中添加对本地包的依赖:

    "dependencies": {
      "common": "file:../common"
    }
    
  5. 确保webpack/vite等构建工具正确处理symlink

    如果是webpack,确保配置中正确处理了symlinks:

    // webpack.config.js
    module.exports = {
      // ...
      resolve: {
        symlinks: false,  // 根据需要调整
      },
      // ...
    };
    

通过上述配置,当在packages/common中进行代码修改并提交时,pre-commit钩子会触发依赖包的构建和uni-app项目的重新编译,从而确保依赖更新能够被即时反映到应用中。根据具体需求,还可以进一步优化和扩展这些配置。

回到顶部