reactjs - Rollup - hvordan forhindre CSS-import fra d.ts-fil?
Jeg har en React- & Typescript/tailwind/postcss/Rollup-oppsett for å bygge et komponentbibliotek, på dette depotet.
Alt fungerer som forventet bortsett fra ett problem; en tilsvarende import for ../styles/index.css blir inkludert i den genererte dist/index.d.ts-filen. Jeg ønsker å ha deklarasjoner for komponentene mine, men ikke denne CSS-importen.
Problemet er at denne index.css-filen ligger utenfor dist-mappen, og ikke er inkludert i den endelige biblioteket. I stedet blir den minifiserte og rensede Tailwind CSS-filen generert og brukt.
Nåværende løsning
Jeg er for øyeblikket avhengig av en kommando etter bygging for å fjerne importen fra filen ved å bruke sed:
scripts: {
...
"build": "rollup -c && cp dist.package.json dist/package.json",
"fix": "sed '1d' ./dist/index.d.ts > ./tmp.d.ts; mv ./tmp.d.ts ./dist/index.d.ts",
}
Jeg føler ikke at dette er en optimal tilnærming. Hvis jeg kan forhindre importen i byggeprosessen i stedet, ville dette være å foretrekke.
Lignende problemer
Jeg fant dette problemet, men pseudokoden som er gitt fungerer ikke/er ikke fullstendig. Videre føles dette mer som en midlertidig løsning enn en reell fiksering.
rollup.config.js
For hva det er verdt, er min nåværende rollup-konfigurasjon som følger:
import peerDepsExternal from "rollup-plugin-peer-deps-external";
import resolve from "@rollup/plugin-node-resolve";
import typescript from "rollup-plugin-typescript2";
import postcss from "rollup-plugin-postcss";
import del from "rollup-plugin-delete";
import simplevars from "postcss-simple-vars";
import nested from "postcss-nested";
import cssnext from "postcss-cssnext";
import cssnano from "cssnano";
/**
* @type {import('rollup').RollupOptions}
*/
export default {
input: "lib/index.tsx",
output: [
{
file: "dist/index.tsx",
format: "es",
sourcemap: false,
},
],
plugins: [
del({ targets: "dist/*" }),
peerDepsExternal(),
postcss({
config: {
path: "./postcss.config.js",
},
plugins: [
simplevars(),
nested(),
cssnext({ warnForDuplicates: false }),
cssnano(),
],
extensions: [".css"],
minimize: true,
modules: false,
extract: "index.css",
}),
resolve(),
typescript({
useTsconfigDeclarationDir: true,
}),
],
};
Svar #1
Hvis vi antar at dette var din konfigurasjon nedenfor, opprett en ny konfigurasjon (typesConfig) for dts, legg til nytt alternativ external og oppgi et regulært uttrykk.
const typesConfig = {
input: "dist/index.d.ts",
output: [{ file: "dist/types.d.ts", format: "esm", sourcemap: true }],
// Create a new option external and provide a regexp
external: [/\.css$/], // ignore .css file
plugins: [dts()],
};
export default [{
input: "lib/index.tsx",
output: [ ... ],
plugins: [
del({ targets: "dist/*" }),
...
resolve(),
],
},
typesConfig
];
Jeg håper dette besvarer spørsmålet ditt.
