ค้นหาเว็บไซต์

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".

บทความที่เกี่ยวข้อง