我有浏览器扩展(打字),通过Viteplugin CRXJS构建.构建后,创建了包含精简脚本的文件夹,但跳过了manifest.web_accessible_resources中的脚本(用于注入到网页).

我需要做什么才能在构建时缩小文件src/injection.js?此时,文件只需复制-粘贴到输出文件夹.

// manifest.ts
import { defineManifest } from '@crxjs/vite-plugin'

export default defineManifest({
  "manifest_version": 3,
  "permissions": ["storage"],
  "content_scripts": [
    {
      "run_at": "document_start",
      "matches": [
        "https://*.example.com/*"
      ],
      "js": [
        "src/content/content.ts"
      ]
    }
  ],
  "action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "service_worker": "src/background/background.ts"
  },
  "icons": {
    "48": "assets/icons/icon48.png",
  },
  "web_accessible_resources": [
    {
      "matches": [
        "https://*.example.com/*"
      ],
      "resources": [
        "src/injection.js",
      ],
      "use_dynamic_url": true,
    }
  ],
})
// vite.config.ts
import { defineConfig } from 'vite'
import { crx } from '@crxjs/vite-plugin'
import { svelte } from '@sveltejs/vite-plugin-svelte'
import path from 'path'
import sveltePreprocess from 'svelte-preprocess'
import manifest from './src/manifest';

export default defineConfig(({ mode }) => {
  const production = mode === 'production'

  return {
    build: {
      minify: true,
      emptyOutDir: true,
      outDir: 'build',
      rollupOptions: {
        output: {
            return 'assets/[name]-[hash][extname]';
          },
        },
      }
    },
    plugins: [
      crx({ manifest }),
      svelte({
        compilerOptions: {
          dev: !production,
        },
        preprocess: sveltePreprocess(),
      }),
    ],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'), 
      },
    },
  }
})

推荐答案

如果将文件路径添加到build.rollupOptions.input,则Vite也会将它们缩小.

// vite.config.ts
import { defineConfig } from 'vite'
import { crx } from '@crxjs/vite-plugin'
import path from 'path'
import manifest from './src/manifest';

const jsFilesToInclude = manifest.web_accessible_resources
  .map(item => item.resources.filter(path => path.endsWith('.js')))
  .flat(1)
  .map(path => 'public/' + path)

export default defineConfig(({ mode }) => {
  const production = mode === 'production'

  return {
    build: {
      minify: true,
      emptyOutDir: true,
      outDir: 'build',
      rollupOptions: {
        input: jsFilesToInclude,
        output: {
            return 'assets/[name]-[hash][extname]';
          },
        },
      }
    }
  }
})

Javascript相关问答推荐

zoom svg以适应圆

窗口.getComputedStyle()在MutationObserver中不起作用

django无法解析余数:[0] from carray[0]'

被CSS优先级所迷惑

Google图表时间轴—更改hAxis文本 colored颜色

useNavigation更改URL,但不呈现或显示组件

我不知道为什么setwritten包装promise 不能像我预期的那样工作

为什么我的列表直到下一次提交才更新值/onChange

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

在带有背景图像和圆形的div中添加长方体阴影时的重影线

在react JS中映射数组对象的嵌套数据

material UI按钮组样式props 不反射

为什么客户端没有收到来自服务器的响应消息?

使用插件构建包含chart.js提供程序的Angular 库?

令牌JWT未过期

基于产品ID更新条带产品图像的JavaScript命中错误

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

我怎样才能得到一个数组的名字在另一个数组?

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

如何阻止外部脚本进入顶层导航