Skip to content

Laravel Mix, how to pass variable while mixing?

So I have a JS file that I want to mix and copy and compress using Laravel mix; my webpack.mix.js file looks like so:

const mix = require('laravel-mix');

mix.js('resources/js/foo/foo.js', 'public/foo.js');
mix.copy('public/foo.js', 'public/js/foo.js');
mix.version();

The thing is that foo.js has a variable called env, set to dev on local envs, and we set it to app on production.

Is there a way I can automate this? For example, can I pass the variable according to the env while mixing the file and set this?

Answer

https://laravel-mix.com/extensions/string-replace

npm i laravel-mix-string-replace to install the package

This is how I solved it in mix file:

const pixelEnv = process.env.APP_ENV == "local" ? 'dev' : 'app';
mix.js('resources/js/foo/foo.js', 'public/foo.js').stringReplace({
    test: /foo.js/,
    loader: 'string-replace-loader',
    options: {
      search: 'PIXEL_ENV',
      replace: pixelEnv,
    }
  });