Laravel and Vue .env dynamic MIX_ Variables, with laravel mix and vue.js

Updated: Jan 26, 2025

Laravel and Vue .env dynamic MIX_ Variables, with laravel mix and vue.js

In Laravel and Vue.js applications, it is common to have environment variables that need to be configured differently based on the environment (e.g., development, staging, or production). Laravel provides a way to manage environment variables using the .env file, while Vue.js uses the process.env object to access these variables. In this answer, we will discuss how to set up dynamic MIX_ variables in Laravel and Vue.js.

First, let's understand what MIX_ variables are. In Laravel Mix, MIX_ variables are used to pass values to the compiled JavaScript or CSS files. These variables can be used to configure various options, such as the output file path or the public path.

To set up dynamic MIX_ variables, we need to follow these steps:

  1. Define the environment variable in Laravel's .env file.

Let's assume we have an environment variable called MIX_API_URL that we want to use to set the API URL for our Vue.js application. We can define this variable in the .env file as follows:

MIX_API_URL=http://api.example.com
  1. Load the .env file in Laravel.

To load the .env file, we need to add the following line to our .env.php file:

return file_exists(__DIR__.'/.env') ? file_get_contents(__DIR__.'/.env') : '';
  1. Make the environment variable available to Vue.js.

To make the environment variable available to Vue.js, we need to use Laravel's app() function to retrieve the value of the variable and pass it to the Vue.js instance. We can do this in the bootstrap.js file, which is automatically loaded by Laravel when the application starts.

window.Vue = require('vue');
import App from './App.vue';
import axios from 'axios';

// Retrieve the API URL from the environment variable
const apiUrl = window.Mix.env.MIX_API_URL;

// Set the API URL for axios
axios.defaults.baseURL = apiUrl;

// Create a new Vue instance and mount it to the app element
new Vue({
  render: h => h(App),
}).$mount('#app');
  1. Use the environment variable in Vue.js.

Now that we have made the environment variable available to Vue.js, we can use it in our components or other JavaScript code as follows:

export default {
  data() {
    return {
      apiUrl: window.Mix.env.MIX_API_URL,
    };
  },
  methods: {
    fetchData() {
      // Use the API URL to make an API request
      axios.get('/api/data')
        .then(response => {
          // Handle the response data
        })
        .catch(error => {
          // Handle the error
        });
    },
  },
};
  1. Compile the Laravel Mix assets with the dynamic MIX_ variable.

Finally, we need to compile the Laravel Mix assets with the dynamic MIX_ variable. We can do this by running the following command in the terminal:

npm run production

This command will compile the JavaScript and CSS files with the MIX_API_URL variable set to the value defined in the .env file. The compiled files will be saved in the public/js and public/css directories, respectively.

That's it! We have successfully set up dynamic MIX_ variables in Laravel and Vue.js. This approach allows us to configure various options in our Laravel Mix assets based on the environment, making it easier to manage our application across different environments.