项目还包含以下附加属性:
此文件是哪种类型的生成输出 。构建会生成捆绑的入口点、代码拆分的“块”、源映射和复制的资产(如图像) 。
path
磁盘上文件的绝对路径或输出路径(如果文件未写入磁盘) 。
loader
加载程序用于解释文件 。请参阅 捆绑程序 > 加载程序 以了解 Bun 如何将文件扩展名映射到相应的内置加载程序 。
hash
文件内容的哈希 。始终为资产定义 。
sourcemap
与此文件对应的源映射的另一个 BuildArtifact (如果生成) 。仅为入口点和区块定义 。
与 BunFile 类似 , BuildArtifact 对象可以直接传递到 new Response() 中 。
const build = Bun.build({/* */});const artifact = build.outputs[0];// Content-Type is set automaticallyreturn new Response(artifact);Bun 运行时在记录 BuildArtifact 对象时实现了特殊的漂亮打印 , 以便更轻松地进行调试 。
Build script
Shell output
// build.tsconst build = Bun.build({/* */});const artifact = build.outputs[0];console.log(artifact);Server componentsBun 的捆绑器通过 --server-components 标志对 React Server Components 提供了实验性支持 。我们将在本周晚些时候发布其他文档和示例项目 。Tree shakingBun 的捆绑器支持对未使用的代码进行树摇晃 。捆绑时始终启用此功能 。
package.json"sideEffects"field package.json"sideEffects"field
Bun 在 package.json 中支持 "sideEffects": false。这是对捆绑器的提示 , 即该包没有副作用 , 并且可以更积极地消除死代码 。
PURE__评论
Bun 支持 __PURE__ 注释:
file.js
function foo() {return 123;}/** #__PURE__ */ foo();由于 foo 没有副作用 , 这会导致一个空文件:
output.js
在 Webpack 的文档 中了解更多信息 。
process.env.NODE_ENVand--define
Bun 支持 NODE_ENV 环境变量和 --define CLI 标志 。这些通常用于有条件地在生产版本中包含代码 。
如果 process.env.NODE_ENV 设置为 "production" , Bun 将自动删除包装在 if (process.env.NODE_ENV !== "production") { ... } 中的代码 。
node-env.js
if (process.env.NODE_ENV !== "production") {module.exports = require("./cjs/react.development.js");} else {module.exports = require("./cjs/react.production.min.js");}ES Module tree-shaking ES 模块摇树ESM 树摇动适用于 ESM 和 CommonJS 输入文件 。Bun 的捆绑器会在安全的情况下自动从 ESM 文件中删除未使用的导出 。
entry.js
foo.js
import { foo } from "./foo.js";console.log(foo);未使用的 bar 导出将被消除 , 从而导致:
output.js
// foo.jsvar $foo = 456;console.log($foo);CommonJS tree-shaking在有限的情况下 , Bun 的捆绑器会自动将 CommonJS 转换为 ESM , 运行时开销为零 。考虑这个微不足道的例子:
index.ts
foo.js
import { foo } from "./foo.js";console.log(foo);Bun 会自动将 foo.js 转换为 ESM , 并对未使用的 exports 对象进行树摇晃 。
Bundled
// foo.jsvar $foo = 123;// entry.jsconsole.log($foo);请注意 , 在许多情况下 , CommonJS的动态特性使这变得非常困难 。例如 , 考虑以下三个文件:
- entry.js
- foo.js
- bar.js
// entry.jsexport default require("./foo");Bun 无法在不执行 foo.js 的情况下静态确定它的导出 。( Object.assign 也可以被覆盖 , 这使得静态分析在一般情况下是不可能的 。在这种情况下 , Bun 不会摇晃 exports 对象;相反 , 它会注入一些 CommonJS 运行时代码以使其按预期工作 。
Source maps
捆绑器支持内联和外部源映射 。
const build = await Bun.build({entrypoints: ["./src/index.ts"],// generates a *.js.map file alongside each outputsourcemap: "external",// adds a base64-encoded `sourceMAppingURL` to the end of each output filesourcemap: "inline",});console.log(await build.outputs[0].sourcemap.json()); // => { version: 3, ... }Minifier没有缩小器的JavaScript捆绑器是不完整的 。此版本还引入了内置于 Bung 中的全新 JavaScript 缩减器 。使用 minify: true 启用缩小 , 或使用以下选项更精细地配置缩小行为:
推荐阅读
- 刘欢|“刘欢去世”?这一次,让我看透了娱乐圈的新骗局
- 在 Ubuntu 上安装和使用 Qemu
- 林志玲|林志玲穿“皇帝的新装”,当镜头拉近下移,全网沸腾了
- 王苏娅|胡歌的新电影来了!!
- |在意大利的新职业,当狗保姆月入3000欧以上!需求还很大!
- 扒一扒针对东亚的新型恶意软件 FLUHORSE
- 釉里红|投资收藏界的新宠凭什么是这只黝黑的茶碗,收藏价值在哪里
- 纪敏佳|纪敏佳:接受央视专访,从头到尾不提8年前改的新名字“纪丹迪”
- 杨幂|解约不到24小时, 杨幂的新公司就已成立,依旧是嘉行第3大股东
- 娱乐圈|“换性别”再出道,这在娱乐圈里绝对是一个相当炸裂的新闻!
