diff --git a/example/.umirc.ts b/example/.umirc.ts
index 8b91b66..822eb46 100644
--- a/example/.umirc.ts
+++ b/example/.umirc.ts
@@ -6,8 +6,6 @@ export default defineConfig({
extensions: {
name: 'Umi Extension Plugin',
description: '用于 Chrome 插件开发的 Umi 插件',
- manifestVersion: 2,
- minimumChromeVersion: '80',
icons: {
16: 'logo/logo@16.png',
32: 'logo/logo@32.png',
@@ -20,17 +18,12 @@ export default defineConfig({
openInTab: true,
},
popupUI: '@/pages/index',
- permissions: ['http://*/*', 'https://*/*'],
+ permissions: ['storage'],
+ host_permissions: ['http://*/*', 'https://*/*'],
background: {
- scripts: ['@/background/index'],
- persistent: true,
+ service_worker: '@/background/index',
},
contentScripts: [
- {
- matches: ['http://*/*', 'https://*/*'],
- entries: ['jquery', 'require.js'],
- runAt: 'document_end',
- },
{
matches: ['https://github.com/*'],
entries: ['@/contentScripts/github'],
@@ -41,7 +34,12 @@ export default defineConfig({
},
],
extends: {
- web_accessible_resources: ['*'],
+ web_accessible_resources: [
+ {
+ resources: ['test1.png', 'test2.png'],
+ matches: ['https://web-accessible-resources-1.glitch.me/*'],
+ },
+ ],
},
},
});
diff --git a/example/package.json b/example/package.json
index 1766083..91e83dd 100644
--- a/example/package.json
+++ b/example/package.json
@@ -1,10 +1,10 @@
{
+ "version": "1.0.0",
"dependencies": {
"jquery": "^3.6.0",
"require.js": "^1.0.0"
},
"devDependencies": {
"@types/jquery": "^3.5.5"
- },
- "version": "1.0.0"
+ }
}
diff --git a/example/src/contentScripts/github/index.tsx b/example/src/contentScripts/github/index.tsx
index a7441e3..661ea16 100644
--- a/example/src/contentScripts/github/index.tsx
+++ b/example/src/contentScripts/github/index.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import ReactDOM from 'react-dom';
+import ReactDOM from 'react-dom/client';
import styles from './style.less';
console.log(`Current page's url must be prefixed with https://github.com`);
@@ -10,7 +10,9 @@ const App = () => {
};
const container = document.createElement('div');
+
container.id = 'umi';
document.body.append(container);
-ReactDOM.render(, container);
+const root = ReactDOM.createRoot(container);
+root.render();
diff --git a/package.json b/package.json
index 4e958ee..f6d3ed2 100644
--- a/package.json
+++ b/package.json
@@ -118,6 +118,6 @@
"typedoc-plugin-external-module-map": "^1.3.2",
"typedoc-plugin-markdown": "^3.13.4",
"typescript": "^4.2.3",
- "umi": "^3.4.11"
+ "umi": "^3.5.33"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b7eaf4a..ae01991 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,107 +4,119 @@ overrides:
react: ^18.0.0
react-dom: ^18.0.0
-specifiers:
- '@ant-design/pro-skeleton': ^1.0.13
- '@commitlint/cli': ^12.0.0
- '@testing-library/react': ^13.0.0
- '@testing-library/react-hooks': ^8.0.0
- '@types/fs-extra': ^9.0.6
- '@types/generate-json-webpack-plugin': ^0.3.2
- '@types/jest': ^26.0.20
- '@types/lodash': ^4.14.168
- '@types/node': ^18.7.2
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
- '@umijs/fabric': ^2.4.8
- '@umijs/preset-dumi': ^1.0.38
- '@umijs/test': ^3.0.10
- '@umijs/test-utils': ^3.3.7
- antd: ^4.22.4
- babel-plugin-import: ^1.13.3
- body-parser: ^1.18.2
- commitlint-config-gitmoji: ^2.2.0
- concurrently: ^6.0.0
- conventional-changelog-gitmoji-config: ^1.3.6
- cross-env: ^7.0.3
- eslint: ^7.7.0
- eslint-import-resolver-alias: ^1.1.2
- eslint-import-resolver-typescript: ^2.4.0
- express: ^4.15.3
- father-build: ^1.19.1
- fs-extra: ^9.0.1
- generate-json-webpack-plugin: ^1.0.0
- gh-pages: ^3.1.0
- got: ^11.8.2
- husky: ^8.0.1
- lint-staged: ^10.0.8
- npm-run-all: ^4.1.5
- pify: ^5.0.0
- prettier: ^2.7.1
- puppeteer: ^16.1.0
- react: ^18.0.0
- react-dom: ^18.0.0
- semantic-release: ^19.0.3
- semantic-release-config-gitmoji: ^1.2.4
- test-umi-plugin: ^0.1.0
- ts-jest: ^26.4.4
- typedoc: ^0.23.10
- typedoc-plugin-external-module-map: ^1.3.2
- typedoc-plugin-markdown: ^3.13.4
- typescript: ^4.2.3
- umi: ^3.4.11
-
-dependencies:
- fs-extra: 9.1.0
- generate-json-webpack-plugin: 1.0.0
- got: 11.8.5
-
-devDependencies:
- '@ant-design/pro-skeleton': 1.0.13_biqbaboplfbrettd7655fr4n2y
- '@commitlint/cli': 12.1.4
- '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y
- '@testing-library/react-hooks': 8.0.1_zxljzmqdrxwnuenbkrz77w74uy
- '@types/fs-extra': 9.0.13
- '@types/generate-json-webpack-plugin': 0.3.4
- '@types/jest': 26.0.24
- '@types/lodash': 4.14.182
- '@types/node': 18.7.2
- '@types/react': 18.0.17
- '@types/react-dom': 18.0.6
- '@umijs/fabric': 2.12.2
- '@umijs/preset-dumi': 1.1.47_4lhw5mpypdqkwh5z6al4n52e3y
- '@umijs/test': 3.5.32
- '@umijs/test-utils': 3.5.32_ywhf64p4izmzhohh4vp5ldnspu
- antd: 4.22.4_biqbaboplfbrettd7655fr4n2y
- babel-plugin-import: 1.13.5
- body-parser: 1.20.0
- commitlint-config-gitmoji: 2.2.5
- concurrently: 6.5.1
- conventional-changelog-gitmoji-config: 1.4.3
- cross-env: 7.0.3
- eslint: 7.32.0
- eslint-import-resolver-alias: 1.1.2
- eslint-import-resolver-typescript: 2.7.1_eslint@7.32.0
- express: 4.18.1
- father-build: 1.22.3
- gh-pages: 3.2.3
- husky: 8.0.1
- lint-staged: 10.5.4
- npm-run-all: 4.1.5
- pify: 5.0.0
- prettier: 2.7.1
- puppeteer: 16.1.0
- react: 18.2.0
- react-dom: 18.2.0_react@18.2.0
- semantic-release: 19.0.3
- semantic-release-config-gitmoji: 1.2.4_semantic-release@19.0.3
- test-umi-plugin: 0.1.0_k2z3nzfesuepgroq35dngb5t2e
- ts-jest: 26.5.6_typescript@4.7.4
- typedoc: 0.23.10_typescript@4.7.4
- typedoc-plugin-external-module-map: 1.3.2_typedoc@0.23.10
- typedoc-plugin-markdown: 3.13.4_typedoc@0.23.10
- typescript: 4.7.4
- umi: 3.5.32
+importers:
+
+ .:
+ specifiers:
+ '@ant-design/pro-skeleton': ^1.0.13
+ '@commitlint/cli': ^12.0.0
+ '@testing-library/react': ^13.0.0
+ '@testing-library/react-hooks': ^8.0.0
+ '@types/fs-extra': ^9.0.6
+ '@types/generate-json-webpack-plugin': ^0.3.2
+ '@types/jest': ^26.0.20
+ '@types/lodash': ^4.14.168
+ '@types/node': ^18.7.2
+ '@types/react': ^18.0.0
+ '@types/react-dom': ^18.0.0
+ '@umijs/fabric': ^2.4.8
+ '@umijs/preset-dumi': ^1.0.38
+ '@umijs/test': ^3.0.10
+ '@umijs/test-utils': ^3.3.7
+ antd: ^4.22.4
+ babel-plugin-import: ^1.13.3
+ body-parser: ^1.18.2
+ commitlint-config-gitmoji: ^2.2.0
+ concurrently: ^6.0.0
+ conventional-changelog-gitmoji-config: ^1.3.6
+ cross-env: ^7.0.3
+ eslint: ^7.7.0
+ eslint-import-resolver-alias: ^1.1.2
+ eslint-import-resolver-typescript: ^2.4.0
+ express: ^4.15.3
+ father-build: ^1.19.1
+ fs-extra: ^9.0.1
+ generate-json-webpack-plugin: ^1.0.0
+ gh-pages: ^3.1.0
+ got: ^11.8.2
+ husky: ^8.0.1
+ lint-staged: ^10.0.8
+ npm-run-all: ^4.1.5
+ pify: ^5.0.0
+ prettier: ^2.7.1
+ puppeteer: ^16.1.0
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ semantic-release: ^19.0.3
+ semantic-release-config-gitmoji: ^1.2.4
+ test-umi-plugin: ^0.1.0
+ ts-jest: ^26.4.4
+ typedoc: ^0.23.10
+ typedoc-plugin-external-module-map: ^1.3.2
+ typedoc-plugin-markdown: ^3.13.4
+ typescript: ^4.2.3
+ umi: ^3.5.33
+ dependencies:
+ fs-extra: 9.1.0
+ generate-json-webpack-plugin: 1.0.0
+ got: 11.8.5
+ devDependencies:
+ '@ant-design/pro-skeleton': 1.0.13_biqbaboplfbrettd7655fr4n2y
+ '@commitlint/cli': 12.1.4
+ '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y
+ '@testing-library/react-hooks': 8.0.1_zxljzmqdrxwnuenbkrz77w74uy
+ '@types/fs-extra': 9.0.13
+ '@types/generate-json-webpack-plugin': 0.3.4
+ '@types/jest': 26.0.24
+ '@types/lodash': 4.14.182
+ '@types/node': 18.7.2
+ '@types/react': 18.0.17
+ '@types/react-dom': 18.0.6
+ '@umijs/fabric': 2.12.2
+ '@umijs/preset-dumi': 1.1.47_qihto5vn43dnf7aiieqqpk5rqa
+ '@umijs/test': 3.5.32
+ '@umijs/test-utils': 3.5.32_d5wpjxy7xfft2omllrhzjkyjyy
+ antd: 4.22.4_biqbaboplfbrettd7655fr4n2y
+ babel-plugin-import: 1.13.5
+ body-parser: 1.20.0
+ commitlint-config-gitmoji: 2.2.5
+ concurrently: 6.5.1
+ conventional-changelog-gitmoji-config: 1.4.3
+ cross-env: 7.0.3
+ eslint: 7.32.0
+ eslint-import-resolver-alias: 1.1.2
+ eslint-import-resolver-typescript: 2.7.1_eslint@7.32.0
+ express: 4.18.1
+ father-build: 1.22.3
+ gh-pages: 3.2.3
+ husky: 8.0.1
+ lint-staged: 10.5.4
+ npm-run-all: 4.1.5
+ pify: 5.0.0
+ prettier: 2.7.1
+ puppeteer: 16.1.0
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ semantic-release: 19.0.3
+ semantic-release-config-gitmoji: 1.2.4_semantic-release@19.0.3
+ test-umi-plugin: 0.1.0_5ltsttlm5hyxok7ztxon766wla
+ ts-jest: 26.5.6_typescript@4.7.4
+ typedoc: 0.23.10_typescript@4.7.4
+ typedoc-plugin-external-module-map: 1.3.2_typedoc@0.23.10
+ typedoc-plugin-markdown: 3.13.4_typedoc@0.23.10
+ typescript: 4.7.4
+ umi: 3.5.33
+
+ example:
+ specifiers:
+ '@types/jquery': ^3.5.5
+ jquery: ^3.6.0
+ require.js: ^1.0.0
+ dependencies:
+ jquery: 3.6.1
+ require.js: 1.0.0
+ devDependencies:
+ '@types/jquery': 3.5.14
packages:
@@ -3991,6 +4003,12 @@ packages:
pretty-format: 26.6.2
dev: true
+ /@types/jquery/3.5.14:
+ resolution: {integrity: sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==}
+ dependencies:
+ '@types/sizzle': 2.3.3
+ dev: true
+
/@types/json-buffer/3.0.0:
resolution: {integrity: sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==}
dev: false
@@ -4158,6 +4176,10 @@ packages:
'@types/node': 18.7.2
dev: true
+ /@types/sizzle/2.3.3:
+ resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==}
+ dev: true
+
/@types/source-list-map/0.1.2:
resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==}
dev: true
@@ -4409,18 +4431,36 @@ packages:
'@umijs/utils': 3.5.32
dev: true
+ /@umijs/ast/3.5.33:
+ resolution: {integrity: sha512-ZX5tjvfkwwUdnGQ9PtR0sie1YM8EcLwVxtsGdm1hrzSFuLY9aw1PZYvTRlt+b3/wYq4a+4/NAvnTtZrBRWcCuw==}
+ dependencies:
+ '@umijs/utils': 3.5.33
+ dev: true
+
/@umijs/babel-plugin-auto-css-modules/3.5.32:
resolution: {integrity: sha512-ofkGlYLVHdaSfFrCVwcbK8AfsUCXZa3FOtWrxo3dyFdQ9Usv7DrCFaQDYZldvNxcSa2N13ZpNvko3uie27OzCQ==}
dependencies:
'@umijs/utils': 3.5.32
dev: true
+ /@umijs/babel-plugin-auto-css-modules/3.5.33:
+ resolution: {integrity: sha512-P4xwUPBhaeZ4ngpSpZ2tZv+SPJZxrYaLOBT+2foGamlNBDXQ/QmtDLtV8HnUCCBbZJG5CUUrNNibkqzNKUjN+w==}
+ dependencies:
+ '@umijs/utils': 3.5.33
+ dev: true
+
/@umijs/babel-plugin-import-to-await-require/3.5.32:
resolution: {integrity: sha512-038abo0+uCdtXJd4apOFBw3+H1Egl8r++gIzF76kjCc83J7WZBhv+PAtqBZnUirAzU1G399SFjmZ5cG4EnELqw==}
dependencies:
'@umijs/utils': 3.5.32
dev: true
+ /@umijs/babel-plugin-import-to-await-require/3.5.33:
+ resolution: {integrity: sha512-bZZXqr6MjGhTpuiweZMU3shq4HVFccOZfXyBDALpEXX8ngdh8kVGIY22zpGcutfpuPLKz3j8G1sgsZoCGq7Xig==}
+ dependencies:
+ '@umijs/utils': 3.5.33
+ dev: true
+
/@umijs/babel-plugin-lock-core-js-3/3.5.32:
resolution: {integrity: sha512-QebjIiwGR2zTFIwPrHpkonomc7PBSizBruTPFeZbWkAbhLXIjrlGMUVOjOzz5v8FZZvCqQljzfYgdK0WGawV2g==}
dependencies:
@@ -4428,12 +4468,25 @@ packages:
core-js: 3.6.5
dev: true
+ /@umijs/babel-plugin-lock-core-js-3/3.5.33:
+ resolution: {integrity: sha512-DBjjwtsROW0DfHaiBU+OK0X1e/aJ3vmtKvpA3p4DGQkzhINCeif7ciBsnHD0U8s6C6+S+q6Z4uqYg8HMsZbQjQ==}
+ dependencies:
+ '@umijs/utils': 3.5.33
+ core-js: 3.6.5
+ dev: true
+
/@umijs/babel-plugin-no-anonymous-default-export/3.5.32:
resolution: {integrity: sha512-lY09KzAjyZFEWz3V9Th5lFySKJEW9nNzu4/Gh2cypYk1YQoJtEZ+onpWmdWKr5k372bJGnc8jLUi0baHeDsMcw==}
dependencies:
'@umijs/utils': 3.5.32
dev: true
+ /@umijs/babel-plugin-no-anonymous-default-export/3.5.33:
+ resolution: {integrity: sha512-zKK2BN0rMVIgOMkQS8AqtXGDRjljIj/iaOqaaBqh3u3YBgFb2eLh4XXrQW3h0Nw8aWTwH05zqdu/EimxSueDCQ==}
+ dependencies:
+ '@umijs/utils': 3.5.33
+ dev: true
+
/@umijs/babel-preset-umi/3.5.32:
resolution: {integrity: sha512-G1Qp2HFz/O3HVKI5sppQeDBs6wKArMWz/MJUy4Kge2L084BSL8FKcGkIrG+z6CeXciSQL2aro8WW+f2tO3uL1g==}
dependencies:
@@ -4446,39 +4499,51 @@ packages:
'@umijs/utils': 3.5.32
dev: true
- /@umijs/bundler-utils/3.5.32_biqbaboplfbrettd7655fr4n2y:
- resolution: {integrity: sha512-xTPtPBsM1VUztz2Y0gGviH0LgGy2meMnwcTpKoLHCNoUWzzFCXKWrD88NLDBJMzUkEoaGXPReZutDnMx/Ip3YQ==}
+ /@umijs/babel-preset-umi/3.5.33:
+ resolution: {integrity: sha512-y5B7capTn5oJp/Vd4hwhiMEK/pe+l2tUgv65Kzw8x9hnbpGVvgsWajHnJIYu6ScsTlzp9myHVDco7J2AtDjt6g==}
dependencies:
- '@umijs/babel-preset-umi': 3.5.32
- '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/utils': 3.5.32
+ '@babel/runtime': 7.18.6
+ '@umijs/babel-plugin-auto-css-modules': 3.5.33
+ '@umijs/babel-plugin-import-to-await-require': 3.5.33
+ '@umijs/babel-plugin-lock-core-js-3': 3.5.33
+ '@umijs/babel-plugin-no-anonymous-default-export': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/utils': 3.5.33
+ dev: true
+
+ /@umijs/bundler-utils/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-OiWkdGiw4N8Y1a5+lmPy8kvcjnlObvYlcUI2Y713LHr1jqzG+A6FaXVWNM92MdqKNUhFJ39IZTT/+ezcdFDaWA==}
+ dependencies:
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/utils': 3.5.33
transitivePeerDependencies:
- react
- react-dom
- react-router
dev: true
- /@umijs/bundler-utils/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa:
- resolution: {integrity: sha512-xTPtPBsM1VUztz2Y0gGviH0LgGy2meMnwcTpKoLHCNoUWzzFCXKWrD88NLDBJMzUkEoaGXPReZutDnMx/Ip3YQ==}
+ /@umijs/bundler-utils/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa:
+ resolution: {integrity: sha512-OiWkdGiw4N8Y1a5+lmPy8kvcjnlObvYlcUI2Y713LHr1jqzG+A6FaXVWNM92MdqKNUhFJ39IZTT/+ezcdFDaWA==}
dependencies:
- '@umijs/babel-preset-umi': 3.5.32
- '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/utils': 3.5.32
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/utils': 3.5.33
transitivePeerDependencies:
- react
- react-dom
- react-router
dev: true
- /@umijs/bundler-webpack/3.5.32_biqbaboplfbrettd7655fr4n2y:
- resolution: {integrity: sha512-a6ZkJJLHhXZBhGWvOUOjXc3gqlcRFcr6ln8cMHI9DmvLF8U4l0D6KsfDX/I31JtPm3aUnb/vjZ31MfV9LiSbaw==}
+ /@umijs/bundler-webpack/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-7S78lXAnuh0lMAdGzOzMEWlLUc+cYEo0M5aUQREIYfdjzAOioo7p7p09jss5dLpbhs0jBXrGkJBAxyc2E+2d2A==}
hasBin: true
dependencies:
- '@umijs/bundler-utils': 3.5.32_biqbaboplfbrettd7655fr4n2y
+ '@umijs/bundler-utils': 3.5.33_biqbaboplfbrettd7655fr4n2y
'@umijs/case-sensitive-paths-webpack-plugin': 1.0.1
- '@umijs/deps': 3.5.32
- '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/utils': 3.5.32
+ '@umijs/deps': 3.5.33
+ '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/utils': 3.5.33
jest-worker: 26.6.2
node-libs-browser: 2.2.1
normalize-url: 1.9.1
@@ -4495,15 +4560,15 @@ packages:
- react-router
dev: true
- /@umijs/bundler-webpack/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa:
- resolution: {integrity: sha512-a6ZkJJLHhXZBhGWvOUOjXc3gqlcRFcr6ln8cMHI9DmvLF8U4l0D6KsfDX/I31JtPm3aUnb/vjZ31MfV9LiSbaw==}
+ /@umijs/bundler-webpack/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa:
+ resolution: {integrity: sha512-7S78lXAnuh0lMAdGzOzMEWlLUc+cYEo0M5aUQREIYfdjzAOioo7p7p09jss5dLpbhs0jBXrGkJBAxyc2E+2d2A==}
hasBin: true
dependencies:
- '@umijs/bundler-utils': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/bundler-utils': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
'@umijs/case-sensitive-paths-webpack-plugin': 1.0.1
- '@umijs/deps': 3.5.32
- '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/utils': 3.5.32
+ '@umijs/deps': 3.5.33
+ '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/utils': 3.5.33
jest-worker: 26.6.2
node-libs-browser: 2.2.1
normalize-url: 1.9.1
@@ -4533,6 +4598,15 @@ packages:
'@umijs/utils': 3.5.32
dev: true
+ /@umijs/core/3.5.33:
+ resolution: {integrity: sha512-b3X3ZTYo4dsFm4F27HjbJOfTnczNJ6DN4/38Bzc5YwQmt5NUOF8Dpbh5jkGVHmxvj7bu0zygMnHXwlrl3VAmhQ==}
+ dependencies:
+ '@umijs/ast': 3.5.33
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/utils': 3.5.33
+ dev: true
+
/@umijs/deps/3.5.32:
resolution: {integrity: sha512-fH25YLknGKg+q3ogWtcK3/dlKDRPD842KgKBf7S6F/d3HJEINijxkcCprfXRftYXN6WzvKzYsHU7l5FaTbY7vA==}
dependencies:
@@ -4545,6 +4619,18 @@ packages:
regenerate-unicode-properties: 10.0.1
dev: true
+ /@umijs/deps/3.5.33:
+ resolution: {integrity: sha512-WlnesWIUQawiBAmZS5YG0CdNYIF5uWJ76VjEFvEfz5nlvjd7ouAOEkxqJqhcaJ9//V2C90/WIYf3V6jx2n6c7Q==}
+ dependencies:
+ '@bloomberg/record-tuple-polyfill': 0.0.3
+ chokidar: 3.5.1
+ clipboardy: 2.3.0
+ esbuild: 0.12.15
+ jest-worker: 24.9.0
+ prettier: 2.2.1
+ regenerate-unicode-properties: 10.0.1
+ dev: true
+
/@umijs/fabric/2.12.2:
resolution: {integrity: sha512-3fLQ3SOFmyzEbv0ELUPBRMfgMGNkWtJVnhgMmcvgtOfq4g3croDVKQetxjfjJ3cfYqVGtFfbQJ//RuEdYU3+2A==}
hasBin: true
@@ -4585,30 +4671,30 @@ packages:
- supports-color
dev: true
- /@umijs/plugin-analytics/0.2.3_umi@3.5.32:
+ /@umijs/plugin-analytics/0.2.3_umi@3.5.33:
resolution: {integrity: sha512-6Fj+EOzd2vXe1YHjK1aqhHlITWBXcnhPd6pxAEjeGu3vAxDcfp1yM3PoRr//baBXk8CYF2krWDQGYy+OlRXM4A==}
peerDependencies:
umi: 3.x
dependencies:
- umi: 3.5.32
+ umi: 3.5.33
dev: true
- /@umijs/preset-built-in/3.5.32_biqbaboplfbrettd7655fr4n2y:
- resolution: {integrity: sha512-5ndKv96AmUNmQ4QcAjvJFg0+C4Xpd/OICLHVM0vgnpWzKcjB+I0Obm8D+RQjM+qTo9Mmviu+Q7FNpYa3Vc3OEw==}
+ /@umijs/preset-built-in/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-ctmcpC/T2YSKepgGo1BVTl00cIzqSfyGQSWp9deMurOX/Ry6U+qUstYuW+D/PbxP9ZOhsx67/XWHNudpt1dzNA==}
peerDependencies:
react: 16.x || 17.x
dependencies:
'@types/react-router-config': 5.0.2
- '@umijs/babel-preset-umi': 3.5.32
- '@umijs/bundler-webpack': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/core': 3.5.32
- '@umijs/deps': 3.5.32
- '@umijs/renderer-mpa': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/renderer-react': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/runtime': 3.5.32_react@18.2.0
- '@umijs/server': 3.5.32
- '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/utils': 3.5.32
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/bundler-webpack': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/core': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/renderer-mpa': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/renderer-react': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/runtime': 3.5.33_react@18.2.0
+ '@umijs/server': 3.5.33
+ '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/utils': 3.5.33
ansi-html: 0.0.7
core-js: 3.6.5
core-js-pure: 3.24.1
@@ -4629,7 +4715,7 @@ packages:
- react-dom
dev: true
- /@umijs/preset-dumi/1.1.47_4lhw5mpypdqkwh5z6al4n52e3y:
+ /@umijs/preset-dumi/1.1.47_qihto5vn43dnf7aiieqqpk5rqa:
resolution: {integrity: sha512-yv3dzeMSCc5CjmRe8nkVtodNYcJefyRev3T+hhjx74hPtwxNOVlx7PsDov66xdnw9uWUNbfBL7c5g3xT1sCWJQ==}
peerDependencies:
umi: ^3.0.0
@@ -4642,7 +4728,7 @@ packages:
'@mapbox/hast-util-to-jsx': 1.0.0
'@umijs/babel-preset-umi': 3.5.32
'@umijs/core': 3.5.32
- '@umijs/plugin-analytics': 0.2.3_umi@3.5.32
+ '@umijs/plugin-analytics': 0.2.3_umi@3.5.33
'@umijs/runtime': 3.5.32_react@18.2.0
'@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y
'@umijs/utils': 3.5.32
@@ -4677,7 +4763,7 @@ packages:
sitemap: 6.4.0
slash2: 2.0.0
terser: 5.14.2
- umi: 3.5.32
+ umi: 3.5.33
unified: 8.4.2
unist-util-visit: 2.0.3
unist-util-visit-parents: 3.1.1
@@ -4692,15 +4778,15 @@ packages:
- utf-8-validate
dev: true
- /@umijs/renderer-mpa/3.5.32_biqbaboplfbrettd7655fr4n2y:
- resolution: {integrity: sha512-JSKGmx9QS8xJZFz2PRNqTO0JmLxyebDoMJEdrXJHLHCQ3koP/xb5UDAkgAiJjJttEzeZncPC1fGBaAv14bsXnQ==}
+ /@umijs/renderer-mpa/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-xBGX1duw395718DAJasLNFwxhc+N0bEMfBf0flGYFj2tS+dOyU+2zMOBbNpwJOVVpc8nRh17x2ioNY23Xei34w==}
peerDependencies:
react: 16.x || 17.x
react-dom: 16.x || 17.x
dependencies:
'@types/react': 16.14.30
'@types/react-dom': 16.9.16
- '@umijs/runtime': 3.5.32_react@18.2.0
+ '@umijs/runtime': 3.5.33_react@18.2.0
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
dev: true
@@ -4722,8 +4808,8 @@ packages:
- react-router
dev: true
- /@umijs/renderer-react/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa:
- resolution: {integrity: sha512-CvArmiKf4xzu/eLmR1rgDt485AqAR7idaQaVFXWkvigVCSnpNEe+vMi8ldl7GNnl8kEEKoJnTezM8dqjnjuCMA==}
+ /@umijs/renderer-react/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-zMGSF+eBneC5ob4RFxuC17IV5rf/xrQ4HJVog9Ap9ug6/afzGJjcp9A9tUL3ae+qXMzBAih46tAWaOG7RLNbPQ==}
peerDependencies:
react: 16.x || 17.x
react-dom: 16.x || 17.x
@@ -4731,7 +4817,24 @@ packages:
'@types/react': 16.14.30
'@types/react-dom': 16.9.16
'@types/react-router-config': 5.0.6
- '@umijs/runtime': 3.5.32_react@18.2.0
+ '@umijs/runtime': 3.5.33_react@18.2.0
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-router-config: 5.1.1_react@18.2.0
+ transitivePeerDependencies:
+ - react-router
+ dev: true
+
+ /@umijs/renderer-react/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa:
+ resolution: {integrity: sha512-zMGSF+eBneC5ob4RFxuC17IV5rf/xrQ4HJVog9Ap9ug6/afzGJjcp9A9tUL3ae+qXMzBAih46tAWaOG7RLNbPQ==}
+ peerDependencies:
+ react: 16.x || 17.x
+ react-dom: 16.x || 17.x
+ dependencies:
+ '@types/react': 16.14.30
+ '@types/react-dom': 16.9.16
+ '@types/react-router-config': 5.0.6
+ '@umijs/runtime': 3.5.33_react@18.2.0
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
react-router-config: 5.1.1_cngu5vvr3qrvleghcym2mjf55u
@@ -4753,6 +4856,20 @@ packages:
use-subscription: 1.5.1_react@18.2.0
dev: true
+ /@umijs/runtime/3.5.33_react@18.2.0:
+ resolution: {integrity: sha512-9YL0XcGhQszxu2OLWigPn1sWbvuWaPn7PZXvlp7q+AhMrFTz0kwyU3H1/aPphtv0t7k7e+5yJmG1G15fW7Oppg==}
+ peerDependencies:
+ react: 16.x || 17.x
+ dependencies:
+ '@types/react-router': 5.1.12
+ '@types/react-router-dom': 5.1.7
+ history-with-query: 4.10.4
+ react: 18.2.0
+ react-router: 5.2.0_react@18.2.0
+ react-router-dom: 5.2.0_react@18.2.0
+ use-subscription: 1.5.1_react@18.2.0
+ dev: true
+
/@umijs/server/3.5.32:
resolution: {integrity: sha512-GRB4vfnXxX/7TfuRo73teUoIk1FuiW00jcm4lrXbJuw76QoUIbtI59dalTleIlKaclzRObanmpoRTI3JTu9LUg==}
dependencies:
@@ -4761,14 +4878,22 @@ packages:
'@umijs/utils': 3.5.32
dev: true
- /@umijs/test-utils/3.5.32_ywhf64p4izmzhohh4vp5ldnspu:
+ /@umijs/server/3.5.33:
+ resolution: {integrity: sha512-isYwXJsJjUT1IH8VW/44T9K8+dKnd9ul+PC6+6DyWIq5vUfVx7CCVlDzHrP0CUr60XQY7YRwTFwgd4n7mrFpJQ==}
+ dependencies:
+ '@umijs/core': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/utils': 3.5.33
+ dev: true
+
+ /@umijs/test-utils/3.5.32_d5wpjxy7xfft2omllrhzjkyjyy:
resolution: {integrity: sha512-FlYV5BdpR/YOqyRUMn3jtCj7SgnOh+WJeEKhDoU1cBh3q40AuJm6+oJv1AnJW/kiux2Japz389d4eV5XX7+qVg==}
peerDependencies:
'@testing-library/react': ^9.4.0
umi: ^3.0.0
dependencies:
'@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y
- umi: 3.5.32
+ umi: 3.5.33
dev: true
/@umijs/test/3.5.32:
@@ -4809,15 +4934,31 @@ packages:
- react-router
dev: true
- /@umijs/types/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa:
- resolution: {integrity: sha512-Mk2Kmz4vSey9beg8FKm2tuu3nYFGycgL1AtukZ6TFlrhhocjPrJzQ7Klx5DcfIBvqbrDSsUq/u16fAU5vpPYbQ==}
+ /@umijs/types/3.5.33_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-rRsqs1EkVsUrw52a2gEob5CWITwKy4k72IXkpQwvQZhSuRRzwJFeN7+vu8gZHxJIQtm7vvUjVPxCF6xUw6Iqzw==}
dependencies:
- '@umijs/babel-preset-umi': 3.5.32
- '@umijs/core': 3.5.32
- '@umijs/deps': 3.5.32
- '@umijs/renderer-react': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa
- '@umijs/server': 3.5.32
- '@umijs/utils': 3.5.32
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/core': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/renderer-react': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/server': 3.5.33
+ '@umijs/utils': 3.5.33
+ webpack-chain: 6.5.1
+ transitivePeerDependencies:
+ - react
+ - react-dom
+ - react-router
+ dev: true
+
+ /@umijs/types/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa:
+ resolution: {integrity: sha512-rRsqs1EkVsUrw52a2gEob5CWITwKy4k72IXkpQwvQZhSuRRzwJFeN7+vu8gZHxJIQtm7vvUjVPxCF6xUw6Iqzw==}
+ dependencies:
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/core': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/renderer-react': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa
+ '@umijs/server': 3.5.33
+ '@umijs/utils': 3.5.33
webpack-chain: 6.5.1
transitivePeerDependencies:
- react
@@ -4832,6 +4973,13 @@ packages:
'@umijs/deps': 3.5.32
dev: true
+ /@umijs/utils/3.5.33:
+ resolution: {integrity: sha512-Urg4FXbKN03+frIzc5nnC1vTQDGmgW4d0Kh1WRZ9V/6J6o6a9ks3jRDMU/8ak1IeAO2jbWqcTAd1ub23oVXYPg==}
+ dependencies:
+ '@umijs/babel-preset-umi': 3.5.33
+ '@umijs/deps': 3.5.33
+ dev: true
+
/JSONStream/1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -7550,7 +7698,7 @@ packages:
'@umijs/preset-dumi': 1.x
react: ^16.13.1 || ^17.0.0
dependencies:
- '@umijs/preset-dumi': 1.1.47_4lhw5mpypdqkwh5z6al4n52e3y
+ '@umijs/preset-dumi': 1.1.47_qihto5vn43dnf7aiieqqpk5rqa
lodash.throttle: 4.1.1
prism-react-renderer: 1.3.5_react@18.2.0
prismjs: 1.28.0
@@ -11098,6 +11246,10 @@ packages:
- utf-8-validate
dev: true
+ /jquery/3.6.1:
+ resolution: {integrity: sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==}
+ dev: false
+
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
@@ -15547,6 +15699,10 @@ packages:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
dev: true
+ /require.js/1.0.0:
+ resolution: {integrity: sha512-+KwgNIkkrtblYf9Agaxy8p1eTnf7QkZQGk/gq+3rfZr4tROFpCMrz9/ImWfV6dQAO34MaR+VML3jKhen0Ea03A==}
+ dev: false
+
/reserved-words/0.1.2:
resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==}
dev: true
@@ -17093,7 +17249,7 @@ packages:
minimatch: 3.1.2
dev: true
- /test-umi-plugin/0.1.0_k2z3nzfesuepgroq35dngb5t2e:
+ /test-umi-plugin/0.1.0_5ltsttlm5hyxok7ztxon766wla:
resolution: {integrity: sha512-+yo4clw963nHNxGiE/FaDU/dlz3maeOXDvKqKea0jBaB08naH6pv50maWKdfYUoOB8aRcQVEVeBS/Tab3YohMw==}
peerDependencies:
puppeteer: '1'
@@ -17101,7 +17257,7 @@ packages:
dependencies:
puppeteer: 16.1.0
serve-static: 1.15.0
- umi: 3.5.32
+ umi: 3.5.33
transitivePeerDependencies:
- supports-color
dev: true
@@ -17549,17 +17705,17 @@ packages:
dev: true
optional: true
- /umi/3.5.32:
- resolution: {integrity: sha512-LTvlCHJ3sV/jbcUneRUUR/H+iZpmNRfmMV+9vcYaOkMz6C/gOTqXRQ8SeLXzFDzRUk8hbnzemxwHdRGPWvjpyg==}
+ /umi/3.5.33:
+ resolution: {integrity: sha512-ltbxoU1j+78by8wYXOO/8aGiUhS+7zZNhuRqF4R9jYFzz7wldpFaqLUUntqcdlDX+zEytaXhJHKncUJX/8Ck0Q==}
hasBin: true
dependencies:
- '@umijs/bundler-webpack': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/core': 3.5.32
- '@umijs/deps': 3.5.32
- '@umijs/preset-built-in': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/runtime': 3.5.32_react@18.2.0
- '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y
- '@umijs/utils': 3.5.32
+ '@umijs/bundler-webpack': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/core': 3.5.33
+ '@umijs/deps': 3.5.33
+ '@umijs/preset-built-in': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/runtime': 3.5.33_react@18.2.0
+ '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y
+ '@umijs/utils': 3.5.33
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
v8-compile-cache: 2.3.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..77e5e3c
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,4 @@
+packages:
+ - '.'
+ # all packages in subdirs of components/
+ - 'example'
diff --git a/src/fixtures/normal/.umirc.ts b/src/fixtures/normal/.umirc.ts
index 637b442..9f41502 100644
--- a/src/fixtures/normal/.umirc.ts
+++ b/src/fixtures/normal/.umirc.ts
@@ -17,8 +17,7 @@ export default {
},
permissions: ['http://*/*', 'https://*/*'],
background: {
- scripts: ['@/background/index'],
- persistent: true,
+ service_worker: '@/background/index',
},
contentScripts: [
{
diff --git a/src/functions/background.ts b/src/functions/background.ts
index 0c95d00..734a1f6 100644
--- a/src/functions/background.ts
+++ b/src/functions/background.ts
@@ -17,12 +17,12 @@ export default (api: IApi) => {
const { background } = api.config.extensions;
// 如果没有 background 就直接结束
- if (!background || background?.scripts.length === 0) {
+ if (!background?.server_worker) {
return config;
}
// 将 background 作为一个入口插入打包对象中
- config.entry('background').merge(background.scripts);
+ config.entry('background').merge([background.server_worker]);
return config;
});
diff --git a/src/functions/base.ts b/src/functions/base.ts
index 9746aba..89ab872 100644
--- a/src/functions/base.ts
+++ b/src/functions/base.ts
@@ -44,7 +44,7 @@ export default (api: IApi) => {
config.devServer = {
...config.devServer,
// 将插件所需的文件全部写入到 dist 目录
- writeToDisk: (filePath) => {
+ writeToDisk: (filePath: string) => {
const isUmiFile = filePath.match(/umi\./);
const isHotUpdateFile = filePath.match(/hot-update\.js.*/);
return !(isUmiFile || isHotUpdateFile);
diff --git a/src/functions/configSchema.ts b/src/functions/configSchema.ts
index 616975d..cc3f01b 100644
--- a/src/functions/configSchema.ts
+++ b/src/functions/configSchema.ts
@@ -27,13 +27,11 @@ export default (api: IApi) => {
name: pkg.name || 'umi extension template',
version: pkg.version || '1.0.0',
description: pkg.description || '基于 Umi 的 Chrome 插件开发脚手架',
- manifestVersion: 2,
- minimumChromeVersion: '80',
+ manifestVersion: 3,
+ minimumChromeVersion: '88',
permissions: [],
- background: {
- scripts: [],
- persistent: true,
- },
+ host_permissions: [],
+ background: {},
contentScripts: [],
icons: {},
contentSecurityPolicy: {
@@ -152,6 +150,7 @@ export default (api: IApi) => {
manifestVersion: joi.number(),
minimumChromeVersion: joi.string(),
permissions,
+ host_permissions: joi.array().items(joi.string()),
contentSecurityPolicy: joi.object({
nonce: stringArr,
inlineScript: stringArr,
@@ -159,8 +158,7 @@ export default (api: IApi) => {
}),
contentScripts: joi.array().items(contentScript),
background: joi.object({
- scripts: stringArr,
- persistent: joi.boolean(),
+ service_worker: joi.string(),
}),
optionsUI: joi.alternatives(
joi.string(),
diff --git a/src/utils/csp.ts b/src/utils/csp.ts
index 668a049..b94a144 100644
--- a/src/utils/csp.ts
+++ b/src/utils/csp.ts
@@ -78,6 +78,7 @@ export const getCSPHashFromScript = async (path: string | undefined) => {
// 将 html 中的 inlineScript 全部记录到 inlineScriptSHAList 中
extractInlineScript(html).forEach((script) => {
+ console.log(script);
scriptList.push(getScriptSHA(script));
});
})
diff --git a/src/utils/manifest.ts b/src/utils/manifest.ts
index e75efcc..c40c915 100644
--- a/src/utils/manifest.ts
+++ b/src/utils/manifest.ts
@@ -84,8 +84,7 @@ export const generateManifestFromConfig = (
url,
});
- const backgroundStr =
- background && background.scripts.length > 0 ? background : undefined;
+ const backgroundStr = background?.server_worker ? background : undefined;
// 处理 option 参数项
const option = {};
@@ -101,27 +100,16 @@ export const generateManifestFromConfig = (
// 处理 popup 的参数项
const popup = {};
if (typeof popupUI === 'string') {
- popup['browser_action'] = {
+ popup['action'] = {
default_popup: UIPageKeyMap.popup.key,
};
}
if (typeof popupUI === 'object') {
- switch (popupUI.type) {
- default:
- case 'browserAction':
- popup['browser_action'] = {
- default_popup: UIPageKeyMap.popup.key,
- default_icon: popupUI.icon,
- default_title: popupUI.title,
- };
- break;
- case 'pageAction':
- popup['page_action'] = {
- default_popup: UIPageKeyMap.popup.key,
- default_icon: popupUI.icon,
- default_title: popupUI.title,
- };
- }
+ popup['action'] = {
+ default_popup: UIPageKeyMap.popup.key,
+ default_icon: popupUI.icon,
+ default_title: popupUI.title,
+ };
}
// 处理 content scripts
@@ -178,7 +166,7 @@ export const updateUIPath = (manifest: string): string => {
export const updateBackground = (manifest: chromeManifest.Manifest) => {
const data = manifest;
if (data.background) {
- data.background.scripts = ['background.js'];
+ data.background.server_worker = 'background.js';
}
return data;
};
@@ -189,10 +177,10 @@ export const updateBackground = (manifest: chromeManifest.Manifest) => {
*/
export const updateHotLoad = (manifest: chromeManifest.Manifest) => {
const data = manifest;
+ // TODO:如何集成新的热加载?
if (data.background) {
- data.background.scripts.push('hot-reload.js');
} else {
- data.background = { persistent: true, scripts: ['hot-reload.js'] };
+ data.background = { server_worker: 'hot-reload.js' };
}
return data;
};
diff --git a/test/utils/manifest.spec.ts b/test/utils/manifest.spec.ts
index 504752e..68a259b 100644
--- a/test/utils/manifest.spec.ts
+++ b/test/utils/manifest.spec.ts
@@ -33,7 +33,7 @@ const base = {
const baseResult = {
version: '1.0.0',
- browser_action: {
+ action: {
default_popup: '__TO_REPLACE_POPUP__',
},
content_security_policy: "script-src 'self'; object-src 'self'",
@@ -72,21 +72,18 @@ describe('generateManifestFromConfig', () => {
title: 'hello',
type: 'pageAction',
},
- background: { scripts: ['bg'], persistent: true },
+ background: { server_worker: 'bg' },
}),
).toEqual({
...baseResult,
- background: {
- persistent: true,
- scripts: ['bg'],
- },
+ background: { server_worker: 'bg' },
options_ui: {
page: '__TO_REPLACE_OPTION__',
open_in_tab: true,
},
browser_action: undefined,
option_page: undefined,
- page_action: {
+ action: {
default_popup: '__TO_REPLACE_POPUP__',
default_title: 'hello',
},
@@ -103,7 +100,7 @@ describe('generateManifestFromConfig', () => {
}),
).toEqual({
...baseResult,
- browser_action: {
+ action: {
default_popup: '__TO_REPLACE_POPUP__',
default_title: 'hello',
},
@@ -145,20 +142,17 @@ describe('validateVersion', () => {
test('updateBackground', () => {
expect(updateBackground({ background: {} })).toEqual({
- background: { scripts: ['background.js'] },
+ background: { server_worker: 'background.js' },
});
expect(updateBackground({})).toEqual({});
});
test('updateHotLoad', () => {
- expect(updateHotLoad({ background: { scripts: [] } })).toEqual({
- background: { scripts: ['hot-reload.js'] },
+ expect(updateHotLoad({ background: { server_worker: '' } })).toEqual({
+ background: { server_worker: '' },
});
expect(updateHotLoad({})).toEqual({
- background: {
- persistent: true,
- scripts: ['hot-reload.js'],
- },
+ background: { server_worker: 'hot-reload.js' },
});
});
diff --git a/types/chromeManifest/Manifest.d.ts b/types/chromeManifest/Manifest.d.ts
index c973105..5644078 100644
--- a/types/chromeManifest/Manifest.d.ts
+++ b/types/chromeManifest/Manifest.d.ts
@@ -11,9 +11,9 @@ declare namespace chromeManifest {
* One integer specifying the version of
* the manifest file format your package requires.
* As of Chrome 18, developers should specify 2 (without quotes)
- * @see https://developer.chrome.com/docs/extensions/mv2/manifest/manifest_version/
+ * @see https://developer.chrome.com/docs/extensions/mv3/manifest/
*/
- manifest_version: ManifestVersion;
+ manifest_version: ManifestVersionV3;
/**
* Specifies the subdirectory of `_locales` that
* contains the default strings for this extension.
@@ -300,6 +300,7 @@ declare namespace chromeManifest {
}
export type ManifestVersion = 1 | 2 | 3;
+ export type ManifestVersionV3 = 3;
export interface IconStruct {
16?: string;
@@ -332,9 +333,20 @@ declare namespace chromeManifest {
default_popup?: string;
}
+ /**
+ * Background pages have been a fundamental component of the Chrome Extension platform since its introduction.
+ * To put it simply, background pages provide extension authors with an environment that lives independent of any other window or tab.
+ * This allows extensions to observe and take action in response to events.
+ */
export interface Background {
- scripts: string[];
- persistent: boolean;
+ /**
+ * In Manifest V3, the Chrome extension platform moves from background pages to service workers.
+ * As stated in Service Workers: an Introduction, a "service worker is a script that your browser runs in the background, separate from a web page, opening the door to features that don't need a web page or user interaction."
+ * This is the technology that enables native-like experiences such as push notifications, rich offline support, background sync, and "Add to Home Screen" on the open web.
+ * Service workers were inspired in part by background pages in Chrome Extensions, but they iterate and improve on this model by tuning it for web-scale.
+ */
+ server_worker: string;
+ type?: string;
}
export interface ChromeUrlOverrides {
diff --git a/types/extensionsPlugin/index.d.ts b/types/extensionsPlugin/index.d.ts
index 42fd8e7..65cd716 100644
--- a/types/extensionsPlugin/index.d.ts
+++ b/types/extensionsPlugin/index.d.ts
@@ -18,10 +18,10 @@ declare namespace extensionsPlugin {
/**
* manifest 版本
* @description
- * manifest 目前出了 3 个版本: 1 已经淘汰了; 2 是目前使用的版本 3 预计在 2021 年开始逐渐启用
- * @default 2
+ * manifest 目前出了 3 个版本: 1 和 2 已经淘汰; 3 是目前使用的版本
+ * @default 3
*/
- manifestVersion: chromeManifest.ManifestVersion;
+ manifestVersion: chromeManifest.ManifestVersionV3;
/**
* 最低 Chrome 版本号
*/