> "js 不用 build 和不用打包是一个意思吗?" 打包不是一个通用的说法,所以可以是一个意思,取决于上下文 > "我理解的 build 就是把 js 压缩成乱码一般~" 不是一个过程,js 里 Build 主要做几件事: 1. 按 ui 描述语言生成代码 2. 把多文件合并成一个 3. 把高级格式和语法糖转变成各个引擎的原生 js 4. 混淆,也就是你说的变成乱码 5. 压缩
我理解 build 是把源代码编译成可直接运行的代码,比如把 ts 编译成 js ,把 ESNext 编译成 ES5 ,把 js 编译成字节码。 常用的工具有: https://github.com/microsoft/TypeScript https://github.com/babel/babel https://github.com/swc-project/swc https://github.com/bytenode/bytenode 打包(bundle | pack)根据不同的项目类型有不同的操作。 对于通用模块项目(npm package),打包需要将源代码编译成 esm 模块以及 cjs 模块,有时还需要输出 .d.ts 类型声明文件。 常用的工具有: https://github.com/rollup/rollup https://github.com/evanw/esbuild https://github.com/unjs/unbuild https://github.com/egoist/tsup https://github.com/developit/microbundle 对于应用项目(app),打包需要将源代码以及依赖资源(cs, json, 图片, 甚至 node 本身) 构建成静态文件或者可执行文件,目的是减少 app 体积、方便部署。 常用的工具有: https://github.com/evanw/esbuild https://github.com/vitejs/vite https://github.com/webpack/webpack https://github.com/web-infra-dev/rspack https://github.com/nexe/nexe https://github.com/vercel/pkg