[Vie] 依赖预构建

使用Vite模板vue-ts. https://github.com/vitejs/vite/tree/main/packages/create-vite

 

 

一个组件在没加入Lodash之前:

当加入lodash之后,会自动把它加入到.vite/deps中去:

 

假如不用依赖构建

vite.config.ts

  return {
    plugins: [vue()],
    // ...
    optimizeDeps: {
      exclude: ['lodash-es']
    }
  }

可以看到,lodash已经从.vite/deps中被移除了

在网页加载的时候形成了瀑布流问题。

 

利用esbuild来简单的实现

pnpm add esbuild -D

prebundle.cjs

const esbuild = require('esbuild');

//用户存放扫描到的第三方依赖包的名称
const deps = [];

//扫描插件
function depScanPlugin(deps) { 
  return {
    name: 'esbuild-dep-scan',
    setup(build) { 
      // 正则表达式,简单判断所有不以.开头的路径都是第三方依赖
      build.onResolve({ filter: /^[^\.]/ }, args => {
        // 将扫描到的第三方依赖包名称存入deps数组中
        deps.push(args.path);
      })
    }
  }
}
//进行依赖扫描
(async () => {
  await esbuild.build({
    // 依赖预构建扫描不需要写入文件
    write: false,
    entryPoints: ['src/index.js'],
    //是否需要打包
    bundle: true,
    outdir: './dist',
    loader: {
      '.js': 'jsx',
      '.svg': 'dataurl',
      '.png': 'file'
    },
    plugins: [depScanPlugin(deps)]
  });


  await esbuild.build({
    // 入口文件就是上面扫描的地址
    entryPoints: deps,
    write: true,
    bundle: true,
    format: 'esm', 
    outdir:'./node_modules/.vite/deps',
  })
})();
  • 先扫描文件,把所有第三方库加到deps数组中去
  • 然后写入到把第三方库的bundle写入到'./node_modules/.vite/deps'中
posted @ 2025-02-06 03:45  Zhentiw  阅读(30)  评论(0)    收藏  举报