javascript - นำเข้าโมดูล es6 ในสคริปต์พื้นหลังของส่วนขยาย Chrome MV3 ด้วย TypeScript
ฉันเป็นมือใหม่ในการสร้าง ส่วนขยาย Chrome mv3 ตอนนี้ฉันกำลังสร้าง ส่วนขยาย โดยใช้ Typescript เป็นภาษาหลักของฉัน ฉันได้ลองนำเข้า โมดูล Es6 แล้ว แต่เมื่อฉันโหลดส่วนขยาย Chrome แสดงข้อความว่า "เกิดข้อผิดพลาด Uncaught ReferenceError: exports is not defined"
นี่คือโครงสร้างโครงการของฉัน
| .babelrc
| manifest.json
| package.json
| tsconfig.json
| webpack.config.js
|
+---public
| +---html
| | index.html
| | popup.html
| |
| +---js
| | background.d.ts
| | background.js
| | background.js.map
| | background.utils.d.ts
| | background.utils.js
| | background.utils.js.map
| | index.html
| | main.js
| | popup.d.ts
| | popup.js
| | popup.js.map
| |
| \---styles
| popup.css
|
\---src
| background.ts
| background.utils.ts
| popup.ts
|
\---@types
\---background
index.d.ts
ไฟล์ manifest.json ของฉัน:
{
"name": "Getting Started Example",
"description": "Build an Extension!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "./public/js/background.js",
"persitent": true
},
"action": {
"default_popup": "./public/html/popup.html"
},
"minimum_chrome_version": "92",
"permissions": [
"management",
"scripting",
"activeTab",
"webRequest",
"tabs",
"webNavigation",
"storage"
],
"content_scripts": [
{
"matches": [
"*://*.nytimes.com/*"
],
"js": [
"./public/js/popup.js"
]
}
]
}
ไฟล์ tsconfig.json ของฉัน:
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"typeRoots": [
"./node_modules/@types"
],
"sourceMap": true,
"outDir": "./public/js",
"sourceRoot": "./src",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
ในไฟล์ background.utils.ts ของฉัน:
const myFunction = ()=>{}
export default myFunction
ในไฟล์ background.ts ของฉัน:
import myFunction from './background.utils/'
แต่ Chrome บอกว่าการส่งออกไม่ถูกกำหนด แม้ว่าฉันจะลองหลายวิธีบนอินเทอร์เน็ต เช่น การเพิ่ม "type": "module" ในไฟล์ mainifest.json หรือการลบ "module": "commonjs" ในไฟล์ tsconfig.json
พวกคุณมีไอเดียไหมว่าทำไมถึงเกิดเหตุการณ์นี้?
ตั้งตารอที่จะได้รับคำตอบจากพวกคุณ
ขอบคุณมาก
คำตอบ #1
คุณได้พยายามแทรกเข้าไปใน manifest แล้วหรือยัง, "type: module"?
"background": {
"service_worker": "./public/js/background.js",
"type": "module"
},
คำตอบ #2
สำหรับการอ้างอิงในอนาคต นี่คือสิ่งที่ได้ผลสำหรับฉันกับ v3 ของ manifest
ไฟล์ tsconfig.json ของฉัน:
{
"compilerOptions": {
"target": "ES6",
"module": "ES6",
"esModuleInterop": false,
"rootDir": "./src",
"types": [
"chrome"
],
"outDir": "./dist",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
]
}
ไฟล์ manifest.json ของฉัน:
{
"manifest_version": 3,
"name": "A Chrome Extension",
"version": "1.0",
"description": "bla bla",
"action": {
"default_popup": "dist/popup.html",
"default_icon": {
"16": "dist/assets/images/icon16.png",
"48": "dist/assets/images/icon48.png",
"128": "dist/assets/images/icon128.png"
}
},
"permissions": [ ... ],
"background": {
"service_worker": "dist/background.js",
"type": "module"
},
"host_permissions": [ ... ]
}
สิ่งที่ต้องล็อกดาวน์มีดังนี้:
ES6สำหรับทั้งtargetและmoduleในtsconfig.jsonและ"type": "module"ในmanifest.jsonของ"background".
