目錄
前言
1.什麼是WebContainers?
#2.WebContainers API 的主要功能
3.使用 WebContainer API 构建什么?
4.WebContainer的hello-world示例
5.本文总结
首頁 web前端 js教程 WebContainer 1.0發布了!聊聊什麼是WebContainers!

WebContainer 1.0發布了!聊聊什麼是WebContainers!

Feb 23, 2023 pm 03:44 PM
webcontainers

前言

2021 年,StackBlitz發布了 WebContainers,這是一種基於 WebAssembly 的新型作業系統,它使 Node.js 能夠完全在瀏覽器內運行。在過去兩年,每月有數百萬開發人員使用 WebContainers,例如典型的應用 StackBlitz 的編輯器。

2023 年 2 月 14 日 StackBlitz 公開發布了 WebContainer API ,邀請整個 JavaScript 和 Node.js 社群一起在 WebContainers 之上建立應用程式!截止本文發布,StackBlitz已經基於WebContainer建構了 StackBlitz 編輯器、Codeflow IDE 和 Web Publisher等公開產品。

1.什麼是WebContainers?

WebContainers 是一個基於 WebAssembly 的微型作業系統,其允許在瀏覽器標籤內本地啟動 Node.js 伺服器。可以將其視為在瀏覽器內的頁面加載時無縫交付的“Electron polyfill”。

WebContainer 1.0發布了!聊聊什麼是WebContainers!

WebContainers提供的API 允許無頭存取 ,允許開發人員靈活地在該技術之上建立自己的應用程式。同時,WebContainers的許多能力都已開源,並為企業用例提供支援和授權。 WebContainers的主要能力包括:

WebContainer 1.0發布了!聊聊什麼是WebContainers!
  • 執行本機套件管理器在瀏覽器中執行原生版本的npm、 pnpm 和yarn,一切都在您的應用程式中,速度比本地快10 倍。
  • 完整的瀏覽器支援:支援在所有主流瀏覽器中執行WebContainer,從基於Chromium 的瀏覽器到Firefox 或Safari TP
  • 所有主流框架支援立即啟動運行任何主流現代框架的一次性環境。
  • 開箱即用地運行Wasm將您最喜歡的語言或框架移植到Wasm 以在WebContainers 中運行

#2.WebContainers API 的主要功能

##2.1 瀏覽器內檔案系統

WebContainers 使用儲存在記憶體中的暫存虛擬檔案系統啟動,允許開發者以程式設計方式載入/載入檔案和目錄,並對它們執行標準檔案系統操作。

const file = await webcontainerInstance.fs.readFile('/package.json', 'utf-8');
//   readFile文件
const files = await webcontainerInstance.fs.readdir('/src');
// readdir读取目录
await webcontainerInstance.fs.rm('/src', { recursive: true });
// 删除目录
await webcontainerInstance.fs.writeFile('/src/main.js', 'console.log("Hello from WebContainers!")');
// 写文件
await webcontainerInstance.fs.mkdir('src');
// mkdir
登入後複製

2.2 開發伺服器

在WebContainer 中可以按需啟動HTTP 伺服器,並接收一個預覽URL,該URL 可以與使用者共用或使用iframe 直接顯示在應用程式中。虛擬化的 TCP 網路堆疊映射到瀏覽器的 ServiceWorker API 並完全在本地運行,因此即使用戶失去互聯網連接,伺服器也將繼續工作。

async function startDevServer() {
  // 执行 `npm run start` 启动Express服务器
  await webcontainerInstance.spawn('npm', ['run', 'start']);
  // 等待 `server-ready` 事件
  webcontainerInstance.on('server-ready', (port, url) => {
    iframeEl.src = url;
  });
}
登入後複製

在瀏覽器開發工具中,在下一步執行startDevServer() 之後,將能夠看到正在運行的開發伺服器:

WebContainer 1.0發布了!聊聊什麼是WebContainers!
注意:WebContainers 公開server-ready事件,該事件在伺服器準備好接受請求時發出。您可以使用 webcontainerInstance.on 監聽事件。

2.3 Node.js 命令列

Node.js 命令可以直接傳遞到WebContainers 以在頁面載入時執行或由應用程式中的使用者行為觸發。你可以 npm 安裝包,啟動新的節點伺服器,或建立應用程序,就像在本地開發環境中一樣。

webcontainerInstance.spawn('npm', ['install']);
webcontainerInstance.spawn('ls', ['src', '-l']);
// 安装依赖
async function installDependencies() {
  const installProcess = await webcontainerInstance.spawn('npm', ['install']);
  return installProcess.exit;
}
// 函数调用
window.addEventListener('load', async () => {
  textareaEl.value = files['index.js'].file.contents;
  webcontainerInstance = await WebContainer.boot();
  await webcontainerInstance.mount(files);
  const exitCode = await installDependencies();
  // 安装依赖
  if (exitCode !== 0) {
    throw new Error('Installation failed');
  };
});
登入後複製

WebContainer 1.0發布了!聊聊什麼是WebContainers!#

总之,WebContainer API 为 Web 应用程序提供了更新级别的灵活性、可扩展性和性能!

3.使用 WebContainer API 构建什么?

stackblitz与社区成员密切合作并根据反馈、需求和问题开发了 WebContainers。 目前基于WebContainers的用例也越来越多,比如下面的经典用例:

3.1 交互式编码教程

Rich Harris 主导的 Svelte已经开始使用 WebContainers 。 他们构建了一个令人印象深刻的交互式教程,教您如何逐步使用 SvelteKit。 这是获得框架实践经验并了解其工作原理的好方法,同时获得了一致好评!

WebContainer 1.0發布了!聊聊什麼是WebContainers!

Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程序的编译阶段来处理。

与使用虚拟(virtual)DOM 差异对比不同。Svelte 编写的代码在应用程序的状态更改时就能像做外科手术一样更新 DOM。

3.2 生产级 Web IDE

StackBlitz使用 Webcontainers 构建了 Codeflow IDE,它是桌面 Visual Studio Code IDE 的全功能版本,支持 git 命令、桌面扩展和带终端的 Node.js 开发服务器。

WebContainer 1.0發布了!聊聊什麼是WebContainers!

3.3 人工智能应用

WebContainer API 还解锁了开发人员可以创建的一类新的 AI 应用程序。 想象一下使用 OpenAI 集成来生成完全在浏览器内运行的实时应用程序!

WebContainer 1.0發布了!聊聊什麼是WebContainers!

3.4 无代码/低代码环境

WebContainers 支持以前不可能实现的新型低代码或无代码解决方案。 StackBlitz的用户友好型文档编辑工具 Web Publisher 等工具确实使网络更加开放并打破了进入壁垒。

WebContainer 1.0發布了!聊聊什麼是WebContainers!

4.WebContainer的hello-world示例

应用配置环境:

export const projectFiles = {
  myProject: {
    directory: {
      'package.json': {
        file: {
          contents: '...',
        }
      },
      'index.js': {
        file: {
          contents: '...',
        }
      },
    }
  }
};
登入後複製

hello-world.ts程序:

import { WebContainer, FileSystemTree } from '@webcontainer/api';
import { projectFiles } from './project-files.ts';

async function main() {
  // 首先我们启动一个 WebContainer
  const webcontainer = await WebContainer.boot();
   // 启动容器后,我们复制所有项目文件
   // 进入容器的文件系统
  await webcontainer.mount(projectFiles);
   // 安装文件后,通过生成 `npm install` 来安装依赖
  const install = await webcontainer.spawn('npm', ['i']);
  await install.exit;
  // 一旦安装了所有依赖项,我们就可以生成 `npm`
  // 从项目的 `package.json` 运行 `dev` 脚本
  await webcontainer.spawn('npm', ['run', 'dev']);
}
登入後複製

5.本文总结

本文主要和大家介绍如何在浏览器中运行 Node.js,同时对WebContainer 1.0做了介绍,探讨了什么是WebContainers、WebContainers API 的主要功能 、使用 WebContainer API 应用场景等等!

WebContainers 非常适合交互式编码体验,可以用在生产级IDE,编程教程,下一代文档等场景。虽然看起来功能十分有限,却是从 0 到 1 的突破,尝试在浏览器端运行一个微型的操作系统,相信不久的未来,不仅仅是 nodejs,其他的语言,例如 python、Java等。

以上是WebContainer 1.0發布了!聊聊什麼是WebContainers!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

開始使用Chart.js:PIE,DONUT和BUBBLE圖表 開始使用Chart.js:PIE,DONUT和BUBBLE圖表 Mar 15, 2025 am 09:19 AM

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

初學者的打字稿,第2部分:基本數據類型 初學者的打字稿,第2部分:基本數據類型 Mar 19, 2025 am 09:10 AM

掌握了入門級TypeScript教程後,您應該能夠在支持TypeScript的IDE中編寫自己的代碼,並將其編譯成JavaScript。本教程將深入探討TypeScript中各種數據類型。 JavaScript擁有七種數據類型:Null、Undefined、Boolean、Number、String、Symbol(ES6引入)和Object。 TypeScript在此基礎上定義了更多類型,本教程將詳細介紹所有這些類型。 Null數據類型 與JavaScript一樣,TypeScript中的null

See all articles