问题:基于vue-cli生成的vue3+typescript的项目,在引用nox-pro包的时候,由于nox-pro包的源代码中定义了一个别名”@utils”: “src/_utils”, 在业务项目的开发模式下,并没有使用nox-pro目录中定义的tsconfig等配置文件,因此没有找到这个别名的定义而报找不到模块的错误
解决方法:
在业务代码中暂时增加@utils别名的定义
给src/services增加@Service别名作为测试
代码:
vue.config.js
const path = require("path");configureWebpack: {resolve: {alias: {"@Service": path.resolve(__dirname, "./src/services"),},},},
tsconfig.js
"paths": {"@/*": ["src/*"],"@Service/*": ["src/services/*"],},
这样写依然报错,貌似配置没有生效,怀疑是configureWebpack的写法不对,由于vue-cli的已经支持了@的别名,找到源代码,直接在源代码中增加,看是否生效
node_modules/@vue/cli-service/lib/config/base.js
webpackConfig.resolve.alias.set('@', api.resolve('src')).set('@Service', api.resolve('src/services'))
依然报错!!
怀疑是@操作符的问题,第一个别名被拦截了,走不到第二个别名,去掉@符号,直接
.set(‘Service’, api.resolve(‘src/services’))
能正常工作了。
如果base.js定义的@符号在前,拦截了后面在vue.config.js中通过configureWebpack定义@打头的alias,那就无解了;但由于这个错误是ts报出的“找不到模块“@Service/notice”或其相应的类型声明。ts(2307)”,所以尝试一下修改tsconfig.json文件中的顺序,看看效果
tsconfig.js
"paths": {"@Service/*": ["src/services/*"],"@/*": ["src/*"],},
正常了!!
@/的写法表面看来应该不能匹配到@Service/,但为什么写到前面就正常了还需要深入了解。。。
