Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specifying styles to content scripts #1

Closed
avi12 opened this issue Jul 8, 2022 · 7 comments
Closed

Specifying styles to content scripts #1

avi12 opened this issue Jul 8, 2022 · 7 comments

Comments

@avi12
Copy link

avi12 commented Jul 8, 2022

I couldn't figure out how to specify CSS files in the manifest under "content_scripts"
I tried:

{
  "content_scripts": [
    {
      "matches": ["..."],
      "js": ["src/pages/content/index.js"],
      "css": ["src/pages/content/content-script-style.css"]
    }
  ]
}

vite.config.ts

export default defineConfig({
  // ...
  build: {
    rollupOptions: {
      input: {
        background: resolve(pageDir, "background", "index.ts"),
        content: resolve(pageDir, "content", "index.ts"),
        contentStyles: resolve(pageDir, "content", "content-script-styles.css"),
        popup: resolve(pageDir, "popup", "index.html"),
      }
    }
  }
});

What I actually get:

dist
└ assets
    └ contentStyles.87089714.css
    └ popup.8911f826.css
@NekitCorp
Copy link
Owner

NekitCorp commented Jul 9, 2022

I did not think about such a case, as a temporary solution I can offer:

{
  "content_scripts": [
    {
      "matches": ["..."],
      "js": ["src/pages/content/index.js"],
      "css": ["assets/content.css"]
    }
  ]
}

vite.config.ts

build: {
    rollupOptions: {
        input: {
            background: resolve(pagesDir, "background", "index.ts"),
            content: resolve(pagesDir, "content", "index.ts"),
            popup: resolve(pagesDir, "popup", "index.html"),
        },
        output: {
            entryFileNames: (chunk) => `src/pages/${chunk.name}/index.js`,
            chunkFileNames: `assets/[name].js`,
            // https://github.com/vitejs/vite/issues/378#issuecomment-768816653
            assetFileNames: `assets/[name].[ext]`
        },
    },
},

import styles in src/pages/content/index.ts:

import type { IStorage } from "src/types";
import "./styles.css";

chrome.storage.sync.get({ count: 0 } as IStorage, ({ count }: IStorage) => {
    console.log("content", count);
});

Output:

dist/src/pages/options/index.html    0.37 KiB
dist/src/pages/popup/index.html      0.37 KiB
dist/src/pages/background/index.js   0.12 KiB / gzip: 0.12 KiB
dist/src/pages/content/index.js      0.07 KiB / gzip: 0.08 KiB
dist/src/pages/options/index.js      0.20 KiB / gzip: 0.17 KiB
dist/src/pages/popup/index.js        0.20 KiB / gzip: 0.17 KiB
dist/assets/Options.js               4.70 KiB / gzip: 2.17 KiB
dist/assets/Options.css              0.33 KiB / gzip: 0.21 KiB
dist/assets/content.css              0.03 KiB / gzip: 0.05 KiB

I will think of a more beautiful solution, thanks for describing the problem :)

@avi12
Copy link
Author

avi12 commented Jul 9, 2022

What if I wanted to use an SCSS file instead?

@NekitCorp
Copy link
Owner

NekitCorp commented Jul 12, 2022

https://vitejs.dev/guide/features.html#css-pre-processors

npm add -D sass

and that's it, you can use SCSS

@avi12
Copy link
Author

avi12 commented Jul 19, 2022

Unfortunately, Vite copies the SCSS rather than running it through Sass to get the CSS file

@NekitCorp
Copy link
Owner

src/pages/content/index.ts:

import type { IStorage } from "src/types";
import "./styles.scss";

chrome.storage.sync.get({ count: 0 } as IStorage, ({ count }: IStorage) => {
    console.log("content", count);
});

src/pages/content/styles.scss:

$color: red;

body {
    background-color: $color !important;
}
npm run build
> chrome-extension-svelte-typescript-boilerplate@2.0.0 build
> vite build

vite v2.9.13 building for production...
✓ 11 modules transformed.
dist/src/pages/options/index.html    0.37 KiB
dist/src/pages/popup/index.html      0.37 KiB
dist/src/pages/background/index.js   0.12 KiB / gzip: 0.12 KiB
dist/src/pages/content/index.js      0.07 KiB / gzip: 0.08 KiB
dist/src/pages/options/index.js      0.20 KiB / gzip: 0.17 KiB
dist/assets/content.css              0.04 KiB / gzip: 0.06 KiB
dist/src/pages/popup/index.js        0.20 KiB / gzip: 0.17 KiB
dist/assets/Options.css              0.33 KiB / gzip: 0.21 KiB
dist/assets/Options.js               4.70 KiB / gzip: 2.17 KiB

Output dist/assets/content.css:

body{background-color:red!important}

@avi12
Copy link
Author

avi12 commented Aug 25, 2022

Unfortunately, your hotfix breaks when upgrading to Vite 3 #6

@NekitCorp
Copy link
Owner

Added examples in Vite 3.2.0 for these cases

/main/src/content

// Some global styles on the page
import "./styles.css";

// Some JS on the page
storage.get().then(console.log);

// Some svelte component on the page
new Overlay({ target: document.body });

NekitCorp pushed a commit that referenced this issue Aug 25, 2023
fix: Increase @crxjs/vite-plugin to beta 18 for side_panel support.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants