Bun 入门到精通(二)——初始化

embedded/2024/9/22 23:57:44/

bun init

使用 bun init 可以搭建一个新项目,类似于 npm init,同样,bun init 也可以接收 -y/--yes 的参数,同样类似于 npm init -y

bun init

工作原理

  1. 先创建一些默认文件
    1. 包文件:带 name 属性的 package.json
    2. 语言配置文件:jsconfig.json/tsconfig.json:取决于 package.json 文件的入口文件为 .js 还是 .ts
    3. 入口文件:index.ts/index.js
    4. README 文件:README.md
  2. 运行 bun install 安装 @types/bun

bun create

使用 bun create 可以通过一个模板创建一个新项目,模板包括:npm 包、GitHub 存储库、本地模板。

npm__21">通过 npm 包创建

bun create <template> [<destination>]

此命令会从 npm 中下载并执行 create-<template> 包。

通过 GitHub 创建

# 下载库
bun create <user>/<repo>
bun create github.com/<user>/<repo># 下载文件夹
bun create <user>/<repo> mydir
bun create github.com/<user>/<repo> mydir

Bun 会执行以下步骤:

  1. 下载模板

  2. 将所有模板文件复制到目标文件夹中

  3. 使用 bun install

  4. 初始化新的 Git 存储库

    使用 --no-git 选择退出

  5. 运行模板的配置 start 脚本(如果已定义)

默认情况下,Bun 不会覆盖任何现有文件。

可以使用 --force 覆盖现有文件。

通过本地模板创建

⚠通过本地模板创建会删除目标文件夹。

Bun 的模板化器可以扩展为支持在本地文件系统上定义的自定义模板。这些模板应位于以下目录之一中:

  • $HOME/.bun-create/<name> :全局模板
  • <project root>/.bun-create/<name> :项目特定模板

可以通过设置 BUN_CREATE_DIR 环境变量来自定义全局模板路径。

创建的步骤分为两步:

  1. 自定义本地模板(如果已有则跳过)

    进入 $HOME/.bun-create/<name> 目录,创建一个 package.json 文件并添加 name 属性为自定义的名称(例如:bun-template)。

  2. 在要创建文件的目录运行 bun create <name>

高级配置

可以在本地模板的 package.json 中配置一些脚本。

{"bun-create": {// 安装依赖前运行"preinstall": "echo 'Installing...'", // 单一命令// 安装依赖后运行"postinstall": ["echo 'Done!'"], // 多个命令}
}

命令参数

参数描述
--force覆盖现有文件
--no-install跳过安装 node_modules 和任务
--no-git不要初始化 git 仓库
--open完成后启动在浏览器内打开

环境变量

名称描述
GITHUB_API_DOMAIN如果您使用的是 GitHub 企业或代理,则可以自定义 GitHub 域 Bun ping 以供下载
GITHUB_ACCESS_TOKEN这允许 bun create 使用私有存储库,或者如果您受到速率限制

工作原理

  1. npm

    1. GET registry.npmjs.org/@bun-examples/${template}/latest 并解析

    2. GET registry.npmjs.org/@bun-examples/${template}/-/${template}-${latestVersion}.tgz

    3. 解压缩并提取 ${template}-${latestVersion}.tgz${destination}

      如果存在会覆盖的文件,警告并退出,除非 --force 强制覆盖。

  2. GitHub

    1. 从 GitHub 的 API 下载压缩包

    2. 解压缩并提取到 ${destination}

      如果存在会覆盖的文件,警告并退出,除非 --force 强制覆盖

  3. 本地

    1. 打开本地模板文件夹

    2. 以递归方式删除目标目录

    3. 使用最快的系统调用递归复制文件(在 macOS fcopyfile 和 Linux 上, copy_file_range

      如果存在,请勿复制或遍历到 node_modules 文件夹(仅此一项就使其比 cp ) 更快

    4. 再次解析 package.json,更新 name${basename(destination)},从中删除 package.jsonbun-create 部分并将更新后的 package.json 保存到磁盘

      1. 如果检测到Next.js,请添加到 bun-framework-next 依赖项列表中

      2. 如果检测到 Create React App,请在 /src/index 中添加入口点

        {js,jsx,ts,tsx} 更改为 public/index.html

      3. 如果检测到 Relay,请添加 bun-macro-relay 以使 Relay 正常工作

    5. 自动检测 npm 客户端,首选 pnpmyarn (v1),最后 npm

    6. 使用 npm 客户端运行定义 "bun-create": { "preinstall" } 的所有任务

    7. 除非 --no-installpackage.json 中没有依赖项,否则运行 ${npmClient} install

    8. 使用 npm 客户端运行定义 "bun-create": { "postinstall" } 的所有任务

    9. 运行 git init; git add -A .; git commit -am "Initial Commit";

      1. 重命名 gitignore.gitignore

        NPM 会自动删除 .gitignore 文件,使其不出现在包中

      2. 如果存在依赖项,则在安装 node_modules 时,它会在单独的线程中并发运行

      3. 使用 libgit2(如果可用)在微基准测试中进行了测试,执行速度慢了 3 倍


http://www.ppmy.cn/embedded/20376.html

相关文章

机器学习:深入解析SVM的核心概念(问题与解答篇)【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量 在这个线性方程中&#xff…

js动态设置css主题(Style-setProperty)

hex颜色转RGB hex2Rgb(str) {str str.replace("#", "");const hxs str.match(/../g);for (let index 0; index < 3; index) hxs[index] parseInt(hxs[index], 16);return hxs; } RGB转HXS rgb2hex(r,g,b){const hexs [r.toString(16), g.toString…

计算机网络—网络层

一、网络层的功能 网络层的任务 主要任务是通过路由器实现网络互联&#xff0c;进而实现数据报在各网络之间的传输 “数据报”就是从数据链路层接收的分组好的数据&#xff0c;又叫“IP数据报”或“IP分组” 网络层提供的两种服务 1面向连接的虚电路服务 当两台计算机进行…

C++ 如何高效的使用 STL 容器?

目录 1.引言 2.容器分类 3.直接将对象、数据写入容器存在哪些问题&#xff1f; 4.对象是如何复制的&#xff1f; 5.复制存在哪些问题&#xff1f; 6.如何避免复制&#xff1f; 7.其它高效应用 7.1.选择合适的容器 7.2.避免不必要的复制 7.3.使用适当的分配器 7.4.利…

RTC补偿 将核心算法集成在主控MCU中运行,在硬件上增加低成本的温度传感器和晶振,通过软件和硬件的配合

概览 小华HC32F460/HC32L196芯片&#xff0c;将核心算法集成在主控MCU中运行&#xff0c;在硬件上增加低成本的温度传感器和晶振&#xff0c;通过软件和硬件的配合&#xff0c;实现和时钟芯片一样的带有温补功能的高精度RTC&#xff0c;并专门制作了相关的软硬件DEMO。 方案特点…

HCIP-Datacom-ARST必选题库_路由协议【道题】

单选题 442/1327. 策略路由(policy-based-route)不支持根据下列哪种策略来指定数据包转发的路径? 源地址 8 目的地址 源MAC 报文长度 单选题 10/1327、下面是关于路由选择工具的描述,其中表述错误的是 route- policy只能匹配路由和数据包,并不能用来修改路由属性或者数…

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

PotatoPie 4.0 实验教程(31) —— FPGA实现摄像头图像高斯滤波

什么是高斯滤波 高斯滤波是一种常见的图像处理技术&#xff0c;用于去除图像中的噪声和平滑图像。它的原理基于统计学中的高斯分布&#xff08;也称为正态分布&#xff09;。 在高斯滤波中&#xff0c;一个二维的高斯核函数被用来对图像中的每个像素进行加权平均。这个高斯核…