解决在vue的ts项目中使用createjs,导致打包异常的问题。
最近在使用vue+vite+pinia+ts+antd的模式写createjs,本地环境调试的时候基本没有出什么问题,我很开心,觉得以后都可以用新的环境写createjs,结果就在昨天打包测试的时候出问题了。vue开始无法识别a-model的标签了,然后很多css也不见了。一开始我还以为是同事改出的问题,结果最后同事帮我定位了,是我的createjs的问题……(装B失败了)。最后在我今天的努力下,解决了这个问题,废话不多说直接上教程。
先修改tsconfig.json:
{
"compilerOptions": {
"target": "esnext",
"useDefineForClassFields": true,
"module": "esnext",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"allowJs": true,
"resolveJsonModule": true,
"isolatedModules": false,
"esModuleInterop": true,
"lib": ["esnext", "dom"],
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
},
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"noImplicitAny": false
},
"include": ["src/**/*.ts", "src/**/*.d.ts","src/**/*.js", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]
}
看代码这么多,其实影响到createjs的就只有allowjs,noImplicitAny,include。

然后把vite更新到最新的版本,本人一开始的版本是2.9.1,会出问题,更新后是4.3.9,bug消失。
(其实问题不出在js和ts的混合上,本人测试,单纯导入js文件是不会报错的,但是引入createjs后,在router里使用a-model就会报错,具体原因不知,在vite更新版本后,bug消失,所以判断为vite的bug,朋友的vuex不会出问题也佐证了这点)
最后上vue代码:
<template>
<div class="page">
<canvas id="testCanvas" width="1000" height="600"></canvas>
</div>
</template>
<script lang="ts" setup>
import {createjs} from "@/utils/createjs/createjs";
import {onMounted} from "vue";
const init = () =>{
const canvas = document.getElementById("testCanvas");
// const stage = new createjs.Stage(canvas);
const stage = new createjs.StageGL(canvas);
stage.setClearColor('#91DFFF')
createjs.Ticker.timingMode = createjs.Ticker.RAF;
createjs.Ticker.addEventListener("tick",stage);
let shape = new createjs.Shape();
shape.graphics.beginFill('#ff0000').drawRect(0,0,100,100).endFill();
shape.cache(0,0,100,100);
stage.addChild(shape);
const clickHandler = (event) =>{
console.log("click");//build环境console无效,需要自己重写console,博客里有
}
shape.on('click',clickHandler,this)
}
onMounted(()=>{
init();
})
</script>
<style scoped>
</style>
可以看到webGL也可以用,不过注意一点,tsconfig.json改完后不管是什么环境都需要清缓存或者强刷,不然不会起效。

发表评论