javascript - Comment changer dynamiquement les chemins d'importation dans webpack ?


J'ai un ensemble d'exports que j'importe normalement depuis un répertoire :

import { myThing } from 'path/to/dir/es5/things'

Cependant, si j'exécute webpack avec un NODE_ENV spécifique défini, j'aimerais que la racine de toutes ces importations soit traitée comme es6 :

import { myThing } from 'path/to/dir/es6/things'

Comment puis-je faire cela, par exemple, faire en sorte que webpack résolve dynamiquement path/to/dir/es5/* en path/to/dir/es6/* ?

Réponse #1

Vous pouvez utiliser un alias pour cela.

Par exemple, dans votre configuration webpack, vous pouvez utiliser quelque chose comme :

const alias = {};
if (NODE_ENV === ...) {
    alias['path/to/dir/es5'] = 'path/to/dir/es6'
}

Lecture complémentaire : https://webpack.js.org/configuration/resolve/

Réponse #2

Voici ma façon de gérer ce genre de choses.

DefinePlugin intégré couplé avec une variable d'environnement.

dans votre package.json, ajoutez la variable d'environnement de la manière suivante

"script": "... webpack --env.SOME_ENV_VAR=value -p"

Ensuite, ajoutez votre DefinePlugin dans votre fichier webpack.config

plugins: [
    ...

    new webpack.DefinePlugin({
        SOME_ENV_VAR: env.SOME_ENV_VAR,
    }),

    ...
]

Vous pouvez ensuite utiliser SOME_ENV_VAR comme variable globale dans votre code

/* global SOME_ENV_VAR */    

const esX = SOME_ENV_VAR === value ? 'es5' : 'es6';

myThing = require(`path/to/dir/${esX}/things`)