16
votes

Importer le CSS dans node_modules vers svelte

Je veux utiliser le framework css dans mon projet svelte, dans ce cas c'était uikit.

Je l'avais installé avec du yarn add uikit

Et bien sûr, je dois importer le fichier css, avec

@import '../node_modules/uikit/dist/css/uikit.min.css"

Mais ça ne marche pas, où que j'importe ça

  • Style App.svelte
  • Dans global.css
  • Utilisation de la balise dans index.html

N'est-ce pas encore disponible?

Ou est-ce que je devrais l'installer avec yarn, et après cela, je dois copier le fichier requis vers l'extérieur de node_modules, tout comme [cette solution]? ( Comment ajouter le css de node_modules à template.html dans Svelte )

Je pense que ce n'est pas une restriction uniquement pour uikit, mais plutôt la façon dont nous importons un fichier css tiers dans node_modules dans l'application svelte

Erreur


0 commentaires

7 Réponses :


0
votes

Pas familier avec le kit d'interface utilisateur, mais d'après les informations fournies, il me semble que vous devriez l'importer (en utilisant @import ) dans un fichier scss ou sass , pas dans un fichier css. L'utilisation de @import dans un fichier css n'est pas interprétée, mais comme vous pouvez le voir, elle apparaît simplement dans votre navigateur en tant que référence à un fichier dans le répertoire node_modules , qui n'est pas disponible pour le navigateur.

En supposant que vous utilisez un rollup, pour traiter les fichiers scss , vous devrez probablement ajouter la dépendance svelte-preprocess-sass pour que le rollup prenne en charge sass (et scss).

https://github.com/ls-age/svelte-preprocess-sass


2 commentaires

oui, j'utilise le rollup. Mais es-tu sûr que je devrais utiliser sass? Donc, dans svelte, nous devons importer un fichier css dans un fichier sass pour qu'ils fonctionnent? Cela semble un inconvénient


il y a un moyen d'ajouter des fichiers css avec postcss et rollup, mais cela semble un peu moins pratique lengstorf.com/code/learn-rollup-css



0
votes

Donc, si vous voulez utiliser UIKit, j'irais regarder les informations sur la page d'accueil.

À partir de la section de balisage HTML dans l'introduction sur le site UIKit:

Vous devez ajouter:

<link rel="stylesheet" href="../node_modules/uikit/dist/css/uikit.min.css" />

à la tête de votre fichier html.

Donc, dans votre cas, vous pouvez pointer vers votre dossier node_modules comme

    <link rel="stylesheet" href="css/uikit.min.css" />

dans votre modèle.


4 commentaires

Est-ce que c'est ce que vous vouliez dire par "Utilisation de la balise dans index.html"? Ensuite, je pense que nous aurons peut-être besoin de voir du code pour mieux répondre à votre question.


Sur votre capture d'écran, je vois que vous diffusez votre page, mais quel est votre dossier «racine» ou «public»? Le chemin que vous avez défini pour le fichier css est probablement incorrect par rapport à votre racine.


malheureusement, mon code est le même avec votre réponse


Le logiciel que vous utilisez pour diffuser votre code ne vous permettra probablement pas de sortir du dossier / public. Je créerais donc un dossier / css dans public et y copierais le fichier uikit. Et mettez à jour votre balisage dans index.html.



15
votes
  1. Installez le plugin css rollup:

npm install -D rollup-plugin-css-only

  1. Accédez à rollup.config.js et configurez-le en ajoutant le plugin installé à la liste des plugins, avec le paramètre de sortie où la valeur est un fichier css. Plus tard, ce fichier sera créé dans votre dossier public et le contenu du fichier css d'origine y sera copié:

css({ output: "public/uikit.css" })

  1. Accédez à index.html et ajoutez le lien vers votre fichier dans la section head:

<link rel="stylesheet" href="uikit.css" />

  1. importez le fichier css webkit d'origine dans la balise de script de votre composant Svelte:

import "../node_modules/uikit/dist/css/uikit.min.css";

La solution n'est pas la mienne. Tous les crédits vont à ce gars (vers 6h00 dans la vidéo): https://www.youtube.com/watch?v=RBQg89ak_NY


6 commentaires

C'est une bonne réponse (qui devrait être acceptée, d'ailleurs). Cela vaut peut-être la peine de montrer les morceaux de code pour que ce soit beaucoup plus facile à comprendre. Ou, au moins, un lien vers ces éléments dans l'exemple de dépôt. Par exemple: github.com/hidjou/classsed-svelte-tutorial/blob/master/… .


J'espère que quelqu'un verra cela même si je poste beaucoup plus tard. Je me demande quel est l'intérêt d'installer via npm au lieu de simplement copier les fichiers css et js minifiés et de les stocker vous-même dans votre dossier statique. Puisque vous devez les lier dans le fichier template.html ou index.html de toute façon, pourquoi ne pas simplement copier les fichiers bruts eux-mêmes et vous n'avez pas à importer le css dans le script de vos fichiers .svelte


@Jeff Je pense que la raison principale serait la maintenabilité - dans environ 2 ans lorsque vous devez mettre à jour les dépendances, vous ne vous souviendrez peut-être pas de copier / coller le code css mis à jour dans "public / global.css" - si vous le faites de cette façon, vous pouvez simplement mettre à jour votre dépendance dans package.json et être terminé.


Merci @GavinR je n'avais pas pensé à cette partie


actuellement, cela ne semble plus fonctionner. rollup se plaint d'une erreur selon laquelle j'importe un fichier non javascript. Aucun conseil?


Cela fonctionne bien si le .css importé ne fait pas référence aux images, auquel cas les images ne seront pas trouvées. Exemple d'importation de datatables.net-dt / css / jquery.dataTables.min.css renvoie [08:27:47] 404 ─ 0,39 ms ─ /images/sort_asc.png



19
votes

J'ai eu du mal à suivre la réponse de Marvelous Walrus, alors voici une version plus explicite des mêmes étapes.

Rollup est le bundler utilisé par svelte. (Vous connaissez peut-être webpacker en tant que bundler).

Étape 1: Installez le plugin css rollup:

<script>
  // build/extra.css is fed from css files imported here
  import "../node_modules/bootstrap/dist/css/bootstrap.min.css";
  import "../node_modules/bootstrap/dist/css/bootstrap-grid.min.css";

Étape 2: modifier rollup.config.js

vous devez importer le plugin que vous venez d'installer au début de rollup.config.js :

npm install bootstrap

et plus bas dans le fichier, vous devez trouver le tableau des plugins et ajouter un nouveau sur appelé css. Par exemple, je l'ai inséré avant le plugin svelte , qui ressemble à ceci:

<link rel="icon" type="image/png" href="/favicon.png" />
<link rel="stylesheet" href="/build/extra.css" />
<link rel="stylesheet" href="/global.css" />
<link rel="stylesheet" href="/build/bundle.css" />

Lorsque le rollup le fait, il lit tous les fichiers css importés par vos composants, les combine en un seul et les écrit dans public/build/extra.css

Étape 3: éditez public/index.html

Ajoutez le lien vers le nouveau fichier css. Pour moi, cela ressemblait à ceci:

  plugins: [
    css({ output: "public/build/extra.css" }),
    svelte({ ... 

Étape 4: profitez!

Vous êtes maintenant prêt à utiliser les fichiers css de vos packages npm installés. par exemple j'ai ajouté bootstrap par

import css from "rollup-plugin-css-only";

puis recherchez les fichiers css que je souhaite utiliser (ils se trouvaient dans / node_modules / bootstrap / dist / css /) et importez-les au début de App.svelte:

npm install -D rollup-plugin-css-only

Questions ouvertes

Rollup ne semble pas gérer les sourcemaps mentionnés dans bootstrap.min.css et bootstrap-grid.min.css. Ainsi, lorsque j'ouvre les outils de développement, je reçois un avertissement indiquant que je ne peux pas charger les sourcemaps


0 commentaires

0
votes

Avec Parcel comme bundler, vous pouvez mettre dans votre index.js (point d'entrée)

@import 'milligram/dist/milligram.min.css'


0 commentaires

1
votes

Pour quiconque s'intéresse à cela, j'utilise cette solution soignée:


  1. Installez rollup-plugin-css-only
<link rel="stylesheet" href="/build/base.css" />

Ou

<script>
    import "../node_modules/uikit/dist/css/uikit.min.css";
</script>


  1. Utilisez-le dans votre rollup.config.js
import css from "rollup-plugin-css-only";

export default {
    plugins: [
        css({
            output: function (styles, styleNodes) {
                // Filter out any source map imports
                let reg = new RegExp(/^(\/*).*(.map) ?(\*\/)$/gm);
                writeFileSync("public/build/base.css", styles.replace(reg, ""))
            }
        }),
    ]
}

  1. Maintenant, importez-le dans App.svelte
npm i -D rollup-plugin-css-only

  1. Ajoutez ceci à votre fichier index.html
yard add -D rollup-plugin-css-only


0 commentaires

1
votes

Avec Svelte v.3.24.0, il est possible d'importer directement du CSS dans la balise de style de votre composant:

<style lang="scss" global>
    @import '../node_modules/my-package/cssfile';
    @import '../node_modules/my-package/scssfile.scss';
</style>

Nous n'avons donc pas besoin d'installer de plug-ins Rollup supplémentaires ici.


0 commentaires