vue ts版本同时引入ant和element不能打包。

Subsequent property declarations must have the same type. Property ‘$confirm’ must be of type ‘(modalOptios: ModalOptions) => ModalConfirm’, but here has type ‘ElMessageBoxShortcutMethod’.

Subsequent property declarations must have the same type. Property ‘$message’ must be of type ‘Message’, but here has type ‘ElMessage’.

通常vue项目只会用到一个ui库,但是往往会有一些特殊场景一个ui库不满足我们业务场景,我工作中使用到了ant-design-vue(全局引入)和element-ui(按需加载),同时项目是ts版本。
elemt,ant ts报错
我搜索了很多的解决方案,都不符合,我发现它爆错的地方是两个的类型描述文件冲突了,这时候我把node_modules/element-ui/types/message-box.d.ts 和 node_modules/element-ui/types/message.d.ts 相关地方注释后再打包果然不报错了。
在这里插入图片描述
在这里插入图片描述

既然能通过注释的方式解决打包的问题,但是我们不能每次都去注释一次,这时候马上想到node的 fs包能帮我友好解决这个问题。

解决方案:

  1. 在项目根目录创建 config文件夹、os.js文件
    在这里插入图片描述
  2. 编写os.js文件,如下
/**
 * 这个文件在这是为了解决同时引入element-ui / ant-design  ts 爆粗哦,
 * 解决版本把node_modules 相关文件注释了
 * */

let fs = require('fs')
let path = require('path')

let src1 = '../node_modules/element-ui/types/message.d.ts'
annotation(src1, '$message: ElMessage')
let src2 = '../node_modules/element-ui/types/message-box.d.ts'
annotation(src2, '$confirm: ElMessageBoxShortcutMethod')

function annotation(src, params) {
    fs.readFile(path.resolve(__dirname, src), 'utf8', function(err, files) {
        if (!err && files !== '') {
            let val = params
            let has = `// ${params}`
            let start = files.indexOf(val)
            let start2 = files.indexOf(has)
            if (start > -1 && start2 === -1) {
                var result = files.replace(val, has)
                fs.writeFile(
                    path.resolve(__dirname, src),
                    result,
                    'utf8',
                    function(err) {
                        if (err) {
                            console.log(err)
                        }
                    }
                )

                console.log(params + ' 注释成功!')
            } else {
                console.log('没有需要注释对或者已经注释了!')
            }
        } else {
            console.log(
                params + ' 没有需要注释对或者已经注释了或者注释文件失败!'
            )
        }
    })
}

原来的命令,我们只需要修改build部分

  1. 编写package.json运行命令,把我们编写的os.js加入到运行命令
    "scripts": {
        "build": "node config/os.js&vue-cli-service build"
    },

现在运行npm run build

大功告成

Logo

前往低代码交流专区

更多推荐