Dans SASS, est-il possible d'importer un fichier d'un autre répertoire? Par exemple, si j'avais une structure comme celle-ci:
- root_directory
- sub_directory_a
- _common.scss
- template.scss
- sub_directory_b
- more_styles.scss
template.scss pourrait importer _common.scss en utilisant @import "common"
mais est-il possible pour more_styles.scss d'importer _common.scss? J'ai essayé différentes choses, y compris @import "../sub_directory_a/common"
et @import "../sub_directory_a/_common.scss"
mais rien ne semble fonctionner.
-I
? Si ce chemin change, il y aura beaucoup de recherches et de remplacements; et il nécessite la même structure de dossiers locaux que toute personne partageant le .scssVous pouvez utiliser le
-I
commutateur de ligne de commande ou l':load_paths
option du code Ruby pour ajoutersub_directory_a
au chemin de chargement de Sass. Donc, si vous exécutez Sass depuisroot_directory
, faites quelque chose comme ceci:Ensuite, vous pouvez simplement utiliser
@import "common"
dansmore_styles.scss
.la source
-I
Drapeaux de chaîne pour inclure plus d'un répertoire, par exemplesass -I sub_directory_a -I sub_directory_c --watch sub_directory_b:sub_directory_b
En utilisant webpack avec sass-loader, je peux utiliser
~
pour faire référence au chemin racine du projet. Par exemple, en supposant la structure du dossier OP et que vous êtes dans un fichier dans le sous-répertoire_b:Documentation: https://github.com/webpack-contrib/sass-loader#resolving-import-at-rules
la source
node_modules/
et non de la racine du projet."sub_directory_a"
à monincludePaths
et utiliser la@import "common";
syntaxe lors de l'utilisation de la CLI angulaire qui inclut sass-loader.~/
cela ne semble pas faire référence au répertoire personnel pour moi. Ou n'importe quel répertoire que j'ai essayé de tester. Existe-t-il un moyen d'essayer de savoir à quoi cela fait référence?L'importation d'un
.scss
fichier ayant une importation imbriquée avec une position relative différente ne fonctionnera pas. la meilleure réponse proposée (en utilisant beaucoup de../
) est juste un sale hack qui fonctionnera tant que vous en avez ajouté suffisamment../
pour atteindre la racine du système d'exploitation de déploiement de votre projet.la source
meteor
, c'était juste un exemple.La réponse choisie n'offre pas de solution viable.
La pratique d'OP semble irrégulière. Un fichier partagé / commun vit normalement sous
partials
, un répertoire standard standard. Vous devez ensuite ajouter unpartials
répertoire à vos chemins d'importation de configuration afin de résoudre les partiels n'importe où dans votre code.Lorsque j'ai rencontré ce problème pour la première fois, j'ai pensé que SASS vous donnait probablement une variable globale similaire à celle de Node
__dirname
, qui conserve un chemin absolu vers le répertoire de travail actuel (cwd
). Malheureusement, ce n'est pas le cas et la raison en est que l'interpolation sur une@import
directive n'est pas possible, vous ne pouvez donc pas faire de chemin d'importation dynamique.Selon les documents SASS .
Vous devez définir
:load_paths
dans votre configuration Sass. Puisque OP utilise Compass, je vais suivre cela conformément à la documentation ici .Vous pouvez utiliser la solution CLI comme prévu, mais pourquoi? il est beaucoup plus pratique de l'ajouter
config.rb
. Il serait logique d'utiliser CLI pour le remplacementconfig.rb
(par exemple, différents scénarios de construction).Donc, en supposant que vous soyez
config.rb
sous la racine du projet, ajoutez simplement la ligne suivante:add_import_path 'sub_directory_a'
Et maintenant
@import 'common';
fonctionnera très bien n'importe où.Bien que cela réponde OP, il y a plus.
appendice
Vous êtes susceptible de rencontrer des cas où vous souhaitez importer un fichier CSS de manière intégrée, c'est-à-dire non via la
@import
directive vanilla fournie par CSS, mais par une fusion réelle d'un contenu de fichier CSS avec votre SASS. Il y a une autre question à laquelle on ne répond pas de manière concluante (la solution ne fonctionne pas entre environnements). La solution est alors d'utiliser cette extension SASS.Une fois installé, ajoutez la ligne suivante à votre config:
require 'sass-css-importer'
puis, quelque part dans votre code:@import 'CSS:myCssFile';
Notez que l'extension doit être omise pour que cela fonctionne.
Cependant, nous rencontrerons le même problème en essayant d'importer un fichier CSS à partir d'un chemin non par défaut et
add_import_path
ne respectant pas les fichiers CSS. Donc, pour résoudre cela, vous devez ajouter une autre ligne dans votre configuration, qui est naturellement similaire:add_import_path Sass::CssImporter::Importer.new('sub_directory_a')
Maintenant, tout fonctionnera bien.
PS, j'ai remarqué que la
sass-css-importer
documentation indique qu'unCSS:
préfixe est requis en plus d'omettre l'.css
extension. J'ai découvert que cela fonctionne malgré tout. Quelqu'un a lancé un problème , qui est resté sans réponse jusqu'à présent.la source
Gulp fera le travail pour regarder vos fichiers sass et ajouter également les chemins d'autres fichiers avec includePaths. exemple:
la source
-I
option de la ligne de commande, non?node-sass
(le wrapper SASS officiel pournode.js
) fournit une option de ligne de commande--include-path
pour vous aider avec ces exigences.Exemple:
Dans
package.json
:Maintenant, si vous avez un fichier
src/styles/common.scss
dans votre projet, vous pouvez l'importer@import 'styles/common';
n'importe où dans votre projet.Consultez https://github.com/sass/node-sass#usage-1 pour plus de détails.
la source
Pour définir le fichier à importer, il est possible d'utiliser toutes les définitions communes des dossiers. Vous devez juste être conscient que c'est relatif au fichier que vous définissez. En savoir plus sur l'option d'importation avec des exemples, vous pouvez vérifier ici .
la source
Si vous utilisez Web Compiler dans Visual Studio, vous pouvez ajouter le chemin d'accès
includePath
dans compilerconfig.json.defaults. Ensuite, il n'y a pas besoin d'un certain nombre de../
puisque le compilateur utilisera includePath comme emplacement pour rechercher l'importation.Par exemple:
la source
C'est une demi-réponse.
Découvrez Compass , avec lui, vous pouvez le placer
_common.scss
dans unpartials
dossier, puis l'importer avec@import common
, mais cela fonctionne dans tous les fichiers.la source
J'ai rencontré le même problème. De ma solution, je suis arrivé là-dedans. Voici donc votre code:
Pour autant que je sache, si vous souhaitez importer un scss dans un autre, il doit être partiel. Lorsque vous importez depuis un répertoire différent, nommez votre fichier
more_styles.scss
vers_more_styles.scss
. Puis importez-le dans votretemplate.scss
like this @import../sub_directory_b/_more_styles.scss
. Cela a fonctionné pour moi. Mais comme vous l'avez mentionné../sub_directory_a/_common.scss
ne fonctionne pas. C'est le même répertoire dutemplate.scss
. C'est pourquoi cela ne fonctionnera pas.la source
Examinez l'utilisation du paramètre includePaths ...
"Le compilateur SASS utilise chaque chemin dans loadPaths lors de la résolution de SASS @imports."
https://stackoverflow.com/a/33588202/384884
la source
Le meilleur moyen est d'utiliser sass-loader. Il est disponible sous forme de package npm. Il résout tous les problèmes liés au chemin et le rend très facile.
la source
J'ai eu le même problème et j'ai trouvé une solution en ajoutant un chemin d'accès au fichier comme:
@import "C: / xampp / htdocs / Scss_addons / Bootstrap / bootstrap";
@import "C: / xampp / htdocs / Scss_addons / Compass / compass";
la source