vue2+vite+@vitejs/plugin-vue2可以使用require引用图片资源

文章探讨了在Vue2与Vite项目中require的使用情况,指出vue2+vite可以通过@vitejs/plugin-vue2处理require语法,而vue3+vite由于新开发需求,不支持require,推荐使用import.meta.url。

很多文章都说vite不能用require,vue3+vite确实是这样的,但今天无意间发现vue2+vite中是可以使用require引用资源的

vue3搭配vite一般使用的是@vitejs/plugin-vue解析vue语法,而vue2使用的则是另一个插件@vitejs/plugin-vue2插件解析vue语法

看下了@vitejs/plugin-vue2源码在src/template.ts中,对require语法做了处理,匹配到后进行语法替换

function transformRequireToImport(code: string): string {
  const imports: Record<string, string> = {}
  let strImports = ''

  code = code.replace(
    /require\(("(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+')\)/g,
    (_, name): any => {
      if (!(name in imports)) {
        // #81 compat unicode assets name
        imports[name] = `__$_require_${hash(name)}__`
        strImports += `import ${imports[name]} from ${name}\n`
      }

      return imports[name]
    }
  )

  return strImports + code
}

在这里插入图片描述
该提交是尤大自己写的,https://github.com/vitejs/vite-plugin-vue2/commit/893cbf6ae1e01e39bcf90405bcaa7707b1550564

在这里插入图片描述
@vitejs/plugin-vue则没有该功能,不能使用require,这应当出于vue2项目需要迁移vite的考虑,尤大才做了兼容处理,而vue3+vite一般是从新开发,不需要兼容require这种写法,更推荐import.meta.url这类新规范写法

项目启动报错 [vite] [plugin:vite:import-analysis] Cannot find module 'vue-router/dist/vue-router.esm-bundler.js' Require stack: - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/resolve.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/env.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/utils.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/ast.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/dist/cli/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/bin/uni.js at ../node_modules/@dcloudio/uni-h5/dist/uni-h5.es.js:1:0 下午11:18:47 [vite] [plugin:vite:import-analysis] Cannot find module 'vue-router/dist/vue-router.esm-bundler.js' Require stack: - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/resolve.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/env.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/utils.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/ast.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/dist/cli/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/bin/uni.js at ../node_modules/@dcloudio/uni-h5/dist/uni-h5.es.js:1:0 (x2) 下午11:18:47 [vite] [plugin:vite:import-analysis] Cannot find module 'vue-router/dist/vue-router.esm-bundler.js' Require stack: - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/resolve.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/env.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/utils.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/ast.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/dist/cli/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/bin/uni.js at ../node_modules/@dcloudio/uni-h5/dist/uni-h5.es.js:1:0 (x3) 下午11:18:47 [vite] [plugin:vite:import-analysis] Cannot find module 'vue-router/dist/vue-router.esm-bundler.js' Require stack: - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/resolve.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/env.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/utils.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/ast.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/dist/cli/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/bin/uni.js at ../node_modules/@dcloudio/uni-h5/dist/uni-h5.es.js:1:0 (x4) 下午11:18:47 [vite] [plugin:vite:import-analysis] Cannot find module 'vue-router/dist/vue-router.esm-bundler.js' Require stack: - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/resolve.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/env.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/hbx/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/utils.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/ast.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/mp/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/uni-cli-shared/dist/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/dist/cli/index.js - /Users/di/Desktop/uni-preset-vue-vite/node_modules/@dcloudio/vite-plugin-uni/bin/uni.js at ../node_modules/@dcloudio/uni-h5/dist/uni-h5.es.js:1:0 (x5)
最新发布
10-30
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值