Show HN: बिना build configuration के web extensions बनाने वाला CLI टूल
(github.com/cezaraugusto)- Extension.js Chrome, Edge और Firefox के लिए web extensions build करने वाला CLI है, जिससे सिर्फ
npx extension@latest create my-extensionऔरnpm run devके साथ development शुरू किया जा सकता है - इसका लक्ष्य Manifest V3 fragmentation, browser-specific differences, content scripts में hot reload की कमी, और हर target के लिए अलग build pipeline जैसी समस्याओं को zero-config development flow में कम करना है
- यह background, content, popup और options scripts के लिए Hot Module Replacement देता है, और React, Vue, Svelte, Preact components व TypeScript को first-class support करता है
extension build --zipसे Chrome Web Store, Edge Add-ons और Firefox AMO में submit करने के लिए production ZIP बनाया जा सकता है, और--browser=firefoxजैसे browser-specific builds भी संभव हैं- मौजूदा extensions में भी
extension@latestको development dependency के तौर पर जोड़कर औरbuild,dev,previewscripts को connect करके इसे अपनाया जा सकता है
Extension.js किन समस्याओं को हल करना चाहता है
- Extension.js Chrome, Edge और Firefox extensions बनाने के लिए एक CLI tool है
- basic usage flow नया project create करने के बाद development server चलाने का है
npx extension@latest create my-extensioncd my-extensionnpm run dev
- यह
npm,pnpm,yarn,bunके साथ काम करता है - Documentation, templates और examples क्रमशः Documentation, Templates, Examples पर उपलब्ध हैं
Development experience और मुख्य features
- Browser extension development में आने वाली Manifest V3 fragmentation, browser-specific differences, content script hot reload की कमी, और हर target के लिए build pipeline की समस्याओं को कम करने पर focus करता है
- Hot Module Replacement background, content, popup और options scripts पर लागू होता है
- इसमें React, Vue, Svelte, Preact components भी शामिल हैं
- Manifest V3 को default के रूप में इस्तेमाल करता है और Chrome, Edge, Firefox targets के लिए automatic adapters देता है
- एक ही CLI से Chrome, Edge, Firefox और Chromium या Gecko आधारित binaries को target करके run किया जा सकता है
- webpack, rollup या maintain करने लायक plugins के बिना zero config का लक्ष्य रखता है
- TypeScript, React, Vue, Svelte, Preact को first-class support करता है
extension build --zipसे Chrome Web Store और Firefox Add-ons submissions के हिसाब से production build बनाया जा सकता है- मौजूदा extensions में भी इसे एक
devDependencyके रूप में जोड़ा जा सकता है
दूसरे extension development tools से अंतर
- Plasmo, WXT, CRXJS इस्तेमाल कर चुके users के लिए Extension.js के फर्क को feature-wise दिखाता है
- GitHub samples को सीधे run किया जा सकता है
- उदाहरण:
extension dev https://github.com/.../sample
- उदाहरण:
- managed browser binaries देता है
- उदाहरण:
extension install firefoxएक isolated Firefox build download करता है
- उदाहरण:
- content scripts के लिए cross-browser HMR built-in है और अलग plugin जोड़ने की जरूरत नहीं है
- store submission के लिए production ZIP बनाया जा सकता है
- उदाहरण:
extension build --zip
- उदाहरण:
- किसी framework पर निर्भर नहीं है
- custom Chromium और Gecko binaries specify किए जा सकते हैं
--chromium-binary--gecko-binary
Supported frameworks और browsers
- supported frameworks और run examples templates या examples के रूप में उपलब्ध हैं
extension dev,extension start,extension previewमें browser-related flags इस्तेमाल किए जा सकते हैं--browser <chrome | edge | firefox>से browser चुना जाता है--chromium-binary <path-to-binary>से custom Chromium binary specify की जाती है--gecko-binary <path-to-binary>से custom Gecko या Firefox binary specify की जाती है
- supported browsers हैं Google Chrome, Microsoft Edge, Mozilla Firefox, Chromium-based और Gecko-based
- Apple Safari को
Nextके रूप में दिखाया गया है
Build, packaging और managed browsers
- production build
npx extension@latest buildसे run होता है - store submission के लिए ZIP package
npx extension@latest build --zipसे generate होता है - browser-specific builds भी संभव हैं
- उदाहरण:
npx extension@latest build --browser=firefox --zip
- उदाहरण:
- उपयोगी build flags दिए गए हैं
--zip: store upload के लिए ZIP में package करता है--zip-source: store के source code review के लिए source files शामिल करता है--zip-filename <name>: output filename control करता है--polyfill: cross-browser webextension polyfill enable करता है
- Extension.js साफ development session के लिए isolated browser binaries download और manage कर सकता है
npx extension@latest install firefoxnpx extension@latest install --browser=allnpx extension@latest install --where
मौजूदा extensions और sample run करना
- मौजूदा extensions में इसे development dependency के रूप में install किया जाता है
npm install extension@latest --save-dev
package.jsonscripts मेंextension build,extension dev,extension previewजोड़कर इस्तेमाल किया जा सकता हैnpm run dev: developmentnpm run build: production buildnpm run preview: production output check
- Chrome Extension Samples के samples को सीधे लाकर run किया जा सकता है
- उदाहरण:
npx extension@latest dev https://github.com/GoogleChrome/chrome-extensions-samples/… --browser=edge
- उदाहरण:
- Community और examples Discord, GitHub issues, examples पर उपलब्ध हैं
- license MIT है
1 टिप्पणियां
Hacker News टिप्पणियां
शानदार प्रोजेक्ट है। सोच रहा हूं इसे अपने extension (https://github.com/herrherrmann/omnivore-list-popup) में भी आजमाऊं
अब तक extension build या development mode management को मैं खुद scripts से संभालता था, लेकिन देख रहा था कि क्या इसे पहले से मौजूद web-ext से आसानी से बनाया जा सकता है
हालांकि मेरा मुख्य browser Firefox है, और लगता है Extension.js अभी Firefox को पूरी तरह support नहीं करता
--polyfillflag लगाकर Chrome या Edge में चलाया जा सकता है, लेकिन फिलहाल Firefox में extension को manually add करना पड़ता हैनिकट भविष्य में Firefox support जोड़ने की योजना है, लेकिन अभी browser launcher नहीं है
अभी बिल्कुल इसी tool की जरूरत थी। इसे बनाकर share करने के लिए धन्यवाद, और उम्मीद है Firefox support अच्छे से आएगा
Firefox support issue: https://github.com/cezaraugusto/extension.js/issues/5
manifest.jsonकी conflicting requirements को handle करने में मदद करे तो अच्छा होगाजैसे event pages और background service workers का फर्क, या हर browser में मांगी/प्रतिबंधित permissions का inconsistent होना
थोड़ा confusion है। मैंने पहले ही Chrome-only extension JavaScript में लिखा है, और शुरुआत बस Chrome extension docs site से कुछ files copy करने जैसी थी
IDE setup अलग से नहीं किया था, और सच कहूं तो यह भी ठीक से नहीं पता कि क्या करना चाहिए
मैं समझना चाहता हूं कि यह tool कुछ files copy करने से ज्यादा क्या करता है। क्या यह cross-browser support है, या multi-language support?
Chrome extension docs से कुछ files copy करने के बाद browser में “developer mode” manually on करना और files add करनी पड़ती हैं। code बदलने पर changes देखने के लिए browser extension जिन अलग-अलग execution contexts को affect करता है, उन्हें manually refresh करना पड़ता है। कई browsers में test करना हो तो यही process हर browser के लिए repeat करनी पड़ती है
TypeScript या JavaScript framework जैसी package dependencies इस्तेमाल करनी हों तो existing extension abstraction framework पर निर्भर होकर नया तरीका सीखना पड़ता है, या webpack, Parcel, esbuild जैसे tools से खुद configuration बनानी पड़ती है। इस point पर browser extension development जटिल और frustrating हो सकता है
Extension.js development browser में extension को bundle करके run करने की process automate कर इसे simple बनाता है। यह HTML/CSS/JavaScript के अलावा browser areas तक, सभी execution contexts के लिए auto refresh support करता है, और TypeScript तथा React जैसी code dependencies को भी बिना अलग configuration magic के, सिर्फ install करने पर support करता है। यह कई browsers में भी साथ-साथ चलता है
अच्छा प्रोजेक्ट है। अपना पहला Chrome extension मैंने https://crxjs.dev/vite-plugin/getting-started से बनाया था, लेकिन styles सही से चलाने में काफी मेहनत लगी
शायद इसलिए भी कि यह मेरा पहला browser extension development था: https://chromewebstore.google.com/detail/bettermenu-for-door...
अभी बहुत काम बाकी है, इसलिए इस project को भी check करूंगा
वाकई कमाल है। README भी खूबसूरती से बना है
Google Play इतना messy है कि मैं app में extension जोड़ने को टाल रहा था, लेकिन इसे एक बार try करने का सोच रहा हूं
बढ़िया। curious हूं कि इसकी Plasmo जैसे similar framework से तुलना कैसी है
https://www.plasmo.com/
browser extension से सीधे तौर पर जरूरी न होने वाली configuration files और specific rules भी follow करने पड़ते हैं
दूसरी तरफ Extension.js standard extension API से extension बनाने देता है, और सिर्फ configuration files को abstract करता है। tool-specific internal details सीखने की जरूरत नहीं होती। इसलिए अगर Chrome या MDN के examples manifest file को single source of truth मानकर काम करते हैं, तो Extension.js में इस्तेमाल करने के लिए उन्हें refactor करने की जरूरत नहीं पड़ती, जिससे नया project शुरू करना और prototype बनाना आसान हो जाता है
मैंने कुछ extensions बनाए हैं। एक मजाकिया था: जब imgur ने heart का color बदल दिया था और सब नाराज थे, तब उसे वापस बदलने वाला extension
Chrome extension बनाते समय हर बार impostor syndrome बहुत जोर से आता है। अजीब तरह से नया project बनाना बहुत मुश्किल लगता है, इसलिए ऐसा tool हो तो वाकई अच्छा होगा
पसंद आया। अच्छा होगा अगर extension और tabs के बीच communication पर भी थोड़ा magic छिड़क दें
extension बनाते समय हर बार DOM पढ़ना या extension से active tab को message भेजना हमेशा दर्दनाक लगता है
https://docs.plasmo.com/framework/messaging
मैंने एक issue add किया है। Safari support Apple के safari-web-extension-converter CLI tool का इस्तेमाल करके relatively simple होना चाहिए
अच्छा लग रहा है। इसे अपने extension Vim for Docs में एक बार आजमाऊंगा
Firefox support न होना अफसोस की बात है, लेकिन वैसे भी ऐसा कोई extension build tool नहीं है जो Firefox और Chromium-based browsers दोनों को support करता हो