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

Add documentation on how to integrate Linaria #590

Open
3 of 5 tasks
jayu opened this issue Apr 28, 2020 · 6 comments
Open
3 of 5 tasks

Add documentation on how to integrate Linaria #590

jayu opened this issue Apr 28, 2020 · 6 comments
Labels
cat: documentation 📖 Work focused on writing documentation skip autolabeling Use it to disable auto laberer bot for an issue/pr

Comments

@jayu
Copy link
Contributor

jayu commented Apr 28, 2020

Describe the enhancement

Firstly we add more chapters to docs/CONFIGURATION.md to group working integrations

Then modify Setup section in README and list there all possible working integrations from docs/CONFIGURATION.md with links obviously.

I'm not sure what to do with Linaria parcel plugin. I mean we can link it anyway, but I don't know if it is stable.

Motivation

There are tool/frameworks that work with linaria but integrations are not documented

Possible implementations

Related Issues

#434 , #435

@jayu jayu added cat: documentation 📖 Work focused on writing documentation skip autolabeling Use it to disable auto laberer bot for an issue/pr labels Apr 28, 2020
@amankkg
Copy link
Contributor

amankkg commented Jul 7, 2020

What about Snowpack integration?

There is a statement in their docs which seems to be false in case of Linaria:

Snowpack also supports any popular CSS-in-JS library

@arendjr
Copy link

arendjr commented Oct 21, 2020

@amankkg I made an attempt to integrate Linaria with Snowpack, using the following plugin:

const babel = require("@babel/core");
const fs = require("fs");
const path = require("path");
const { promisify } = require("util");
const transform = require("linaria/lib/transform");

const readFile = promisify(fs.readFile);

module.exports = function (snowpackConfig, pluginOptions) {
  const { sourceMap, preprocessor, ...rest } = pluginOptions;

  return {
    name: "snowpack-linaria-plugin",
    resolve: {
      input: [".js", ".jsx", ".ts", ".tsx", ".mjs"],
      output: [".js", ".css"],
    },
    async load({ filePath }) {
      const contents = await readFile(filePath, "utf-8");
      const result = transform(contents, {
        filename: path.basename(filePath),
        preprocessor,
        pluginOptions: rest,
      });

      if (!result.cssText) {
        return {
          ".js": await babel.transformAsync(contents, { filename: filePath }),
        };
      }

      return {
        ".js": await babel.transformAsync(result.code, {
          filename: filePath,
          inputSourceMap: result.sourceMap,
        }),
        ".css": { code: result.cssText, map: result.cssSourceMapText },
      };
    },
  };
};

It's a little bit unfortunate I need to manually invoke Babel, but it mostly seems to do the trick... Except I now run into a runtime issue: TypeError: validAttr is not a function. I have tracked this to react/styled.ts where the import of validAttr seems to be miscompiled (it correctly inlines the dependency, but then tries to take the .default property of that dependency, which doesn't exist because it's not an exports object). At first sight it would appear a Snowpack issue, but my gut says more should be broken if that were the case, so I'm not sure where to look now.

@zachintosh
Copy link

@arendjr Have you had any luck since? Would love to see linaria working in snowpack.

@arendjr
Copy link

arendjr commented Nov 7, 2020

No, to be honest, I gave up on it for now.

@ximet
Copy link

ximet commented Jan 30, 2021

parcel plugin doesn't work with Parcel 2 version.

@karlhorky
Copy link

@jayu because of https://github.com/vercel/next.js/pull/41085/files do you think that the Next.js example can be checked off?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cat: documentation 📖 Work focused on writing documentation skip autolabeling Use it to disable auto laberer bot for an issue/pr
Projects
None yet
Development

No branches or pull requests

6 participants