101 votes

Comment éviter d'utiliser les importations de chemins relatifs (/../../../redux/action/action1) dans create-react-app

J'ai utilisé le paquet create-react-app pour créer un site web react. J'utilisais des chemins relatifs dans toute mon application pour importer des composants, des ressources, redux etc. par exemple, import action from '../../../redux/action

J'ai essayé d'utiliser module-alis paquet npm mais sans succès. Existe-t-il un plugin que je peux utiliser pour importer sur la base du nom du dossier ou d'un alias, c'est-à-dire un chemin absolu ?

Eg., import action from '@redux/action' o import action from '@resource/css/style.css'

1 votes

Deux ans plus tard, l'ARC dispose d'une nouvelle approche pour configurer les importations absolues. Voir la réponse aquí .

121voto

Dan Points 16670

Créez un fichier appelé .env dans la Racine du projet et y écrire :

NODE_PATH=src

Puis redémarrez le serveur de développement. Vous devriez être en mesure d'importer tout ce qui se trouve dans src sans chemins relatifs.

Remarque : je ne recommande pas d'appeler votre dossier src/redux parce que maintenant, il est difficile de savoir si redux import fait référence à votre application ou à la bibliothèque. Au lieu de cela, vous pouvez appeler votre dossier src/app et d'importer des choses de app/... .

Nous ne prenons volontairement pas en charge les syntaxes personnalisées telles que @redux car il n'est pas compatible avec l'algorithme de résolution de Node.

0 votes

Puis-je faire cela dans react-create-app ? J'ai essayé, mais cela ne semble pas fonctionner, bien que le type de ici medium.com/@ktruong008/ suggèrent la même chose

0 votes

@Mehari quelle est votre version de create-react-app et react-scripts ?

0 votes

@qwang create-react-app-1.4.3 & react-scripts-1.0.14

113voto

BenSmith Points 4956

L'approche adoptée dans la réponse acceptée est désormais dépassée. Create React App a maintenant une façon différente de définir les chemins absolus comme documenté aquí .

En résumé, vous pouvez configurer votre application pour prendre en charge l'importation de modules à l'aide de chemins absolus en procédant comme suit :

Créez/éditez votre jsconfig.json/tsconfig.json dans la racine de votre projet avec ce qui suit :

{
  "compilerOptions": {
    "baseUrl": "src"
  },
  "include": ["src"]
}

Alternativement :

Si vous utilisez TypeScript, vous pouvez configurer le paramètre baseUrl dans le fichier compilerOptions du fichier tsconfig.json de votre projet.

Une fois que vous avez fait cela, vous pouvez importer en spécifiant des sous-répertoires de "src" (dans l'exemple suivant, components est un sous-répertoire de src), par ex.

import Button from 'components/Button'

2 votes

@VigneshwaranChandrasekaran ce lien est déjà inclus dans ma réponse. Voir "...manière de définir des chemins absolus comme documenté". aquí ."

1 votes

J'aime mieux cette solution.

6voto

Après avoir essayé La solution de Ben Smith ci-dessus si vous trouvez qu'eslint se plaint de l'importation d'un chemin absolu, ajoutez la ligne suivante à votre configuration eslint :

settings: {
  'import/resolver': {
    node: {
      paths: ['src'],
    },
  },
},

remplacez 'src' par votre dossier si vous utilisez votre propre gabarit avec le nom de votre dossier.

0 votes

Merci pour la référence et +1 pour avoir réussi à faire fonctionner eslint avec la solution.

6voto

santosh Points 420

Nous pouvons utiliser la propriété resolve de webpack 2 dans la configuration de webpack.

Exemple de configuration de webpack utilisant resolve :

Ici, component et utils sont des dossiers indépendants contenant des composants React.

resolve: {
        modules: ['src/scripts', 'node_modules'],
        extensions: ['.jsx', '.js'],
        unsafeCache: true,
        alias: {
            components: path.resolve(__dirname, 'src', 'scripts', 'components'),
            utils: path.resolve(__dirname, 'src', 'scripts', 'utils'),
        }
    }

Après cela, nous pouvons importer directement dans les fichiers :

import UiUtils from 'utils/UiUtils';
import TabContent from 'components/TabContent';

Référence pour Webpack 2 Resolve

1 votes

J'utilise le package create-react-app où je ne peux pas modifier la configuration de webpack. Y a-t-il un autre moyen de le faire ?

0 votes

Webpack.config.js est disponible dans le chemin ci-dessous : /create-react-app/blob/master/packages/react-scripts/config/‌​webpack.config.dev.j‌​s /create-react-app/blob/master/packages/react-scripts/config/‌​webpack.config.prod.‌​js

6 votes

Non, il n'est pas possible de modifier ces configurations. Vous pouvez vous éjecter mais vous perdez alors de nombreux avantages de l'ARC. Veuillez vous reporter à ma réponse pour connaître la façon dont vous pouvez le faire.

2voto

oklas Points 3235

Utilice react-app-rewire-alias solution. Il fournit plus qu'un simple alias, mais il permet aussi de multiples usages. src dans le répertoire racine :

La configuration pour votre exemple ci-dessus est la suivante :

// config-overrides.js:

const {alias} = require('react-app-rewire-alias')

module.exports = function override(config) {
  alias({
    "@redux": "src/redux",
    "@resource": "resource", // or "src/resource" if it is in src
  })(config)
  return config
}

C'est pour les projets js simples.

Voir docs react-app-rewire-alias pour plus d'informations. Comment configurer pour ts projets ou chemins de chargement à partir de jsconfig.json o tsconfig.json etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X