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

2024-04-28 10:28
文章标签 入门 精通 初始化 bun

本文主要是介绍Bun 入门到精通(二)——初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 包创建

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 倍

这篇关于Bun 入门到精通(二)——初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943000

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非