问题:基于vue-cli生成的vue3+typescript的项目,在引用nox-pro包的时候,由于nox-pro包的源代码中定义了一个别名”@utils”: “src/_utils”, 在业务项目的开发模式下,并没有使用nox-pro目录中定义的tsconfig等配置文件,因此没有找到这个别名的定义而报找不到模块的错误

    解决方法:
    在业务代码中暂时增加@utils别名的定义
    给src/services增加@Service别名作为测试

    代码:
    vue.config.js

    1. const path = require("path");
    2. configureWebpack: {
    3. resolve: {
    4. alias: {
    5. "@Service": path.resolve(__dirname, "./src/services"),
    6. },
    7. },
    8. },

    tsconfig.js

    1. "paths": {
    2. "@/*": [
    3. "src/*"
    4. ],
    5. "@Service/*": [
    6. "src/services/*"
    7. ],
    8. },

    这样写依然报错,貌似配置没有生效,怀疑是configureWebpack的写法不对,由于vue-cli的已经支持了@的别名,找到源代码,直接在源代码中增加,看是否生效

    node_modules/@vue/cli-service/lib/config/base.js

    1. webpackConfig.resolve
    2. .alias
    3. .set('@', api.resolve('src'))
    4. .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

    1. "paths": {
    2. "@Service/*": [
    3. "src/services/*"
    4. ],
    5. "@/*": [
    6. "src/*"
    7. ],
    8. },

    正常了!!

    @/的写法表面看来应该不能匹配到@Service/,但为什么写到前面就正常了还需要深入了解。。。