RPCE用の高度な設定
17185 ワード
VITEのためのRPCEは、我々が開発者使用ケースの良いサンプルを得るのに十分長いベータでした.問題を作成し、ディスカッションに参加して助けてくれたみんなに感謝!あなたの入力は非常に貴重です.
これらは、我々が守られた最も一般的な開発者の質問にいくつかの答えです.私はジャックスチーム、クリエイター
Extra HTML pages Dynamic manifest with TypeScript Manifest icons and public assets Web accessible resources
Dynamic content scripts Injected main world scripts
マニフェストで宣言できないWebページを構築する必要があるのは、一般的です.たとえば、ユーザーがログインしたときにポップアップを変更したり、ユーザーが拡張モジュールをインストールしたときには歓迎ページを開きたい場合があります.Reveloper Developer ToolsのようなDevTool拡張子は、マニフェスト内の検査官パネルを宣言しません.
次のファイル構造とマニフェストを指定します.
RPCEはマニフェストを設定オプションとして扱い、ビルドプロセス中に変換します.さらに、マニフェストはJavaScriptオブジェクトであるため、マニフェストを拡張するいくつかのエキサイティングな方法が開きます.
あなたのマニフェストをタイプスクリプトで書くことを想像してください.開発と生産のために別の名前を使用してください.と同期してバージョン番号を保つ
RPCEは
あなたがウェブサイトのためにViteを使ったならば、あなたはよく知られているかもしれませんthe public directory . Viteの内容をコピーする
マニフェスト内のパブリックファイルを参照できます.RPCEが一致しているファイルを見つけなければ
これはあなたのアイコンを入れて無料です
RPCEはglobsを無視する
どのようなWebアクセスリソース、とにかく?
Chrome拡張モジュールのファイルはデフォルトでプライベートです.拡張子がファイル
コンテンツスクリプトでイメージを使用する場合はどうすればよいですか?それはウェブにアクセスしなければならない.なぜ?コンテンツスクリプトはホストページの起源を共有します
それはあなたが使用しているすべてのファイルでマニフェストを更新するには退屈な取得することができます.我々は、ビルドツールを使用しているので、なぜマニュアル作業の束を行う?コンテンツスクリプトにイメージをインポートすると、自動的にマニフェストが更新されます.🪄✨
あなたがしなければならないすべては
The Chrome Scripting API クロム拡張子の背景からコンテンツスクリプトを実行できます.
マニフェストには動的なコンテンツスクリプトを宣言する場所がありませんので、どうやってVITEを教えてくれますか?もちろん、私たちは余分なHTMLページのようなVITE Configにそれらを加えることができました、しかし、RPCEはどのように我々が追加スクリプトを内容スクリプトであるつもりであるということを知っていますか?RPCEが提供するHMRのユニークな味が必要ですか?Webアクセス資源について
RPCE固有のインポートクエリを使用して、コンテンツスクリプトへのインポートポイントを指定します.インポート名がクエリで終了すると
コンテンツスクリプトrun in an isolated world , しかし、スクリプトがホストページの実行環境を変更する必要があります.内容スクリプトは通常、彼らのホストページのDOMにスクリプトタグを加えることによってこれをします.他の内容スクリプト資産のように、主なWorldスクリプトはウェブでアクセス可能でなければなりません.
ダイナミックな内容スクリプト・インポートは私たちを閉じます
を使用してローダファイルをスキップすることができます
RPCEのロードマップの次のことは適切なドキュメントとより良いリリースプロセスです.しかし、心配しないで、我々は機能を追加し、バグを修正する行われていませんあなたは将来のコンテンツスクリプトとより良いVueサポートで影DOMを楽しみにすることができます.私は、SvelteとTarwindの公式サポートを加えることに非常に興奮しています!
RPCEがあなたの開発者経験を改善するならば、give us a star on GitHub またはまた会いましょう.
これらは、我々が守られた最も一般的な開発者の質問にいくつかの答えです.私はジャックスチーム、クリエイター
rollup-plugin-chrome-extension
, または短い間のRPCE.それで、あなたが余分なHTMLページを加えるのを見ているならば、構築時にマニフェストを広げて、新しいクロムスクリプトAPIを使用して、主なWorldスクリプトを注入してください、読んでください!目次
Dynamic content scripts
余分のHTMLページ
マニフェストで宣言できないWebページを構築する必要があるのは、一般的です.たとえば、ユーザーがログインしたときにポップアップを変更したり、ユーザーが拡張モジュールをインストールしたときには歓迎ページを開きたい場合があります.Reveloper Developer ToolsのようなDevTool拡張子は、マニフェスト内の検査官パネルを宣言しません.
次のファイル構造とマニフェストを指定します.
index.html
and src/panel.html
開発中に利用可能ですが、プロダクションビルドでは使用できません.これを修正することができますvite.config.ts
..
├── vite.config.ts
├── manifest.json
├── index.html
└── src/
├── devtools.html
└── panel.html
// manifest.json
{
"manifest_version": 3,
"version": "1.0.0",
"name": "example",
"devtools_page": "src/devtools.html"
}
余分なHTMLページを構築するには、VITEドキュメントからMulti-Page Apps :// vite.config.js
import { resolve } from 'path';
import { defineConfig } from 'vite';
import { chromeExtension } from 'rollup-plugin-chrome-extension';
import manifest from './manifest.json';
export default defineConfig({
build: {
rollupOptions: {
// add any html pages here
input: {
// output file at '/index.html'
welcome: resolve(__dirname, 'index.html'),
// output file at '/src/panel.html'
panel: resolve(__dirname, 'src/panel.html'),
},
},
},
plugins: [chromeExtension({ manifest })],
});
ダイナミックマニフェスト
RPCEはマニフェストを設定オプションとして扱い、ビルドプロセス中に変換します.さらに、マニフェストはJavaScriptオブジェクトであるため、マニフェストを拡張するいくつかのエキサイティングな方法が開きます.
あなたのマニフェストをタイプスクリプトで書くことを想像してください.開発と生産のために別の名前を使用してください.と同期してバージョン番号を保つ
package.json
. 🤔 RPCEは
defineManifest
Viteのような機能defineConfig
関数を実行し、ビルド時にマニフェストを拡張しやすくするために、IntelliSenseを提供します.// manifest.config.ts
import { chromeExtension, defineManifest } from 'rollup-plugin-chrome-extension'
import { version } from './package.json'
const names = {
build: 'My Extension',
serve: '[INTERNAL] My Extension'
}
// import to `vite.config.ts`
export default defineManifest((config, env) => ({
manifest_version: 3,
name: names[env.command],
version,
}))
マニフェストアイコンと公共資産
あなたがウェブサイトのためにViteを使ったならば、あなたはよく知られているかもしれませんthe public directory . Viteの内容をコピーする
public
を返します.マニフェスト内のパブリックファイルを参照できます.RPCEが一致しているファイルを見つけなければ
public
, それはthe Vite project root と出力ファイルに資産を追加します.これはあなたのアイコンを入れて無料です
public
またはどこか他のあなたに意味を作る!// manifest.json
{
"icons": {
// from src/icons/icon-16.png
"16": "src/icons/icon-16.png",
// from public/icons/icon-24.png
"24": "icons/icon-24.png"
},
"web_accessible_resources": [{
matches: ['https://www.google.com/*'],
// copies all png files in src/images
resources: ["src/images/*.png"]
}]
}
RPCEもマッチするファイルをコピーしますglobs インweb_accessible_resources
. RPCEはglobsを無視する
*
and **/*
. おそらくコピーしたくないpackage.json
アンド・オールnode_modules
. 本当の質問は、ウェブサイトが拡張子の中のすべてのファイルにアクセスできるようにすることですか?どのようなWebアクセスリソース、とにかく?
Webアクセス資源
Chrome拡張モジュールのファイルはデフォルトでプライベートです.拡張子がファイル
icon.png
, 拡張子のページはそれにアクセスすることができますが、ランダムなウェブサイト(それはウェブにアクセス可能なリソースではありません)はできません.拡張リソースをWebアクセス可能にするには、以下のマニフェスト内のファイルを宣言する必要がありますweb_accessible_resources
.コンテンツスクリプトでイメージを使用する場合はどうすればよいですか?それはウェブにアクセスしなければならない.なぜ?コンテンツスクリプトはホストページの起源を共有します
https://www.google.com
からのリクエストと同じですhttps://www.google.com
自身.それはあなたが使用しているすべてのファイルでマニフェストを更新するには退屈な取得することができます.我々は、ビルドツールを使用しているので、なぜマニュアル作業の束を行う?コンテンツスクリプトにイメージをインポートすると、自動的にマニフェストが更新されます.🪄✨
あなたがしなければならないすべては
chrome.runtime.getURL
拡張URLを生成するには、次の手順に従いますimport logoPath from './logo.png'
const logo = document.createElement('img')
logo.src = chrome.runtime.getURL(logo)
これらのファイルは、コンテンツスクリプトが実行されるのと同じURLにアクセスできます.また、これらの資産使用a dynamic url , だから悪意のあるウェブサイトは、あなたの拡張機能を指紋にそれを使用することはできません!ダイナミックコンテンツスクリプト
The Chrome Scripting API クロム拡張子の背景からコンテンツスクリプトを実行できます.
マニフェストには動的なコンテンツスクリプトを宣言する場所がありませんので、どうやってVITEを教えてくれますか?もちろん、私たちは余分なHTMLページのようなVITE Configにそれらを加えることができました、しかし、RPCEはどのように我々が追加スクリプトを内容スクリプトであるつもりであるということを知っていますか?RPCEが提供するHMRのユニークな味が必要ですか?Webアクセス資源について
RPCE固有のインポートクエリを使用して、コンテンツスクリプトへのインポートポイントを指定します.インポート名がクエリで終了すると
?script
, デフォルトのエクスポートは、コンテンツスクリプトの出力ファイル名です.その後、このファイル名をクロムスクリプトAPIで使用して、そのコンテンツスクリプトを実行し、VITE HMRから利益を得ることができます.import scriptPath from './content-script?script'
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: [scriptPath]
});
});
ダイナミックコンテンツスクリプトのリソースはデフォルトですべてのURLに利用できますが、defineDynamicResource
機能import { defineManifest, defineDynamicResource } from 'rollup-plugin-chrome-extension'
export default defineManifest({
...manifest,
web_accessible_resources: [
defineDynamicResource({
matches: ['https://www.google.com/*'],
})
]
})
ワールドスクリプト
コンテンツスクリプトrun in an isolated world , しかし、スクリプトがホストページの実行環境を変更する必要があります.内容スクリプトは通常、彼らのホストページのDOMにスクリプトタグを加えることによってこれをします.他の内容スクリプト資産のように、主なWorldスクリプトはウェブでアクセス可能でなければなりません.
ダイナミックな内容スクリプト・インポートは私たちを閉じます
?script
VITE HMRを加えるローダーファイルを含みます.残念ながら、ローダはコンテンツAPIにのみ利用可能なchrome APIに依存しますそれは主要な世界実行環境で働きません.私たちが必要とするのは簡単なESモジュールです.を使用してローダファイルをスキップすることができます
?script&module
インポートクエリ// content-script.ts
import mainWorld from './main-world?script&module'
const script = document.createElement('script')
script.src = chrome.runtime.getURL(mainWorld)
script.type = 'module'
document.head.prepend(script)
今すぐそこに出て、グローバル変数を読んで、リクエストをフェッチし、あなたの心のコンテンツにクラスのプロトタイプを飾る!ロードマップ
RPCEのロードマップの次のことは適切なドキュメントとより良いリリースプロセスです.しかし、心配しないで、我々は機能を追加し、バグを修正する行われていませんあなたは将来のコンテンツスクリプトとより良いVueサポートで影DOMを楽しみにすることができます.私は、SvelteとTarwindの公式サポートを加えることに非常に興奮しています!
RPCEがあなたの開発者経験を改善するならば、give us a star on GitHub またはまた会いましょう.
Reference
この問題について(RPCE用の高度な設定), 我々は、より多くの情報をここで見つけました https://dev.to/jacksteamdev/advanced-config-for-rpce-3966テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol