Yarn run dev issue

User
laravel vite vue ddev setup
yarn run dev not working
port 5173
Assistant
It seems like you are facing an issue where `yarn run dev` isn't working in your Laravel + Vite + Vue.js setup with DDEV, particularly related to port 5173. Here's a step-by-step guide to help you resolve the issue:

1. **Check if the Vite dev server is running:**
– Run `yarn run dev` and check if there are any errors in the console output. Sometimes, an error in the `vite.config.js` file or missing dependencies can cause issues.
– If it's not starting the dev server, try running the command again and see if it outputs more detailed information.

2. **Ensure Vite is properly configured:**
– Make sure your `vite.config.js` is set up correctly. Here's an example of what it should look like for a Laravel + Vue.js setup:

import { defineConfig } from 'vite';
   import vue from '@vitejs/plugin-vue';
   import path from 'path';

   export default defineConfig({
     plugins: [vue()],
     server: {
       host: '0.0.0.0', // Make sure this is set for DDEV to access the server
       port: 5173, // The default port for Vite, make sure this port is available
       hmr: {
         protocol: 'ws', // WebSocket protocol for hot module replacement
         host: 'localhost',
       },
     },
     resolve: {
       alias: {
         '@': path.resolve(__dirname, 'resources/js'), // Update if necessary
       },
     },
   });

3. **Check Docker or DDEV Configuration:**
– Ensure that the `port 5173` is exposed in your Docker or DDEV setup. You can check your DDEV config file (`ddev/config.yaml`) to confirm the port forwarding is set up correctly.
– If needed, add a port mapping under the `ports` section of the `config.yaml`:

ports:
       - "5173:5173"

4. **Check Network Configuration in DDEV:**
– DDEV may have specific network settings or firewall restrictions. Make sure DDEV is correctly forwarding ports and that there are no conflicts with the Vite dev server.

5. **Clear Cache:**
– Sometimes, caching issues can interfere with the development server. Try clearing your node modules cache:

rm -rf node_modules
     yarn install

6. **Verify Yarn Version:**
– Ensure that you're using the right version of Yarn. Run:

yarn --version

– If needed, update it:

npm install -g yarn

7. **Check Logs for Errors:**
– If the dev server is still not running, check for any error messages in your browser's developer console or terminal logs to get more context.

Let me know if you encounter any specific errors, and I can help troubleshoot further!

User
Mixed Content: The page at 'https://shareyourthoughts.ddev.site/' was loaded over HTTPS, but requested an insecure script 'http://0.0.0.0:5173/resources/js/app.js'. This request has been blocked; the content must be served over HTTPS.
Assistant
The error you're encountering is due to the fact that you're serving the page over HTTPS (via `https://shareyourthoughts.ddev.site/`), but Vite is trying to load the JavaScript file over HTTP (`http://0.0.0.0:5173/resources/js/app.js`), which is blocked by the browser due to mixed content security restrictions.

To resolve this issue, you need to make sure that Vite serves its assets over HTTPS as well, matching the protocol used by your site.

Here’s how you can fix this:

### 1. **Configure Vite to use HTTPS:**

Update your `vite.config.js` to enable HTTPS in the Vite dev server. Modify the `server` section to use HTTPS and set the correct host and port:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
import fs from 'fs';

export default defineConfig({
  plugins: [vue()],
  server: {
    host: '0.0.0.0', // Make sure this is set for DDEV to access the server
    port: 5173, // The default port for Vite
    https: {
      key: fs.readFileSync('/path/to/your/ssl/private.key'), // Adjust to your certificate path
      cert: fs.readFileSync('/path/to/your/ssl/certificate.crt'), // Adjust to your certificate path
    },
    hmr: {
      protocol: 'wss', // WebSocket over SSL
      host: 'localhost',
    },
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'resources/js'),
    },
  },
});

**Note:** You will need to adjust the paths to your SSL certificate and key files. In a DDEV environment, DDEV automatically generates self-signed certificates, so you can find them in the DDEV project directory under `.ddev/.ssl`.

If you're unsure about the certificate paths, you can use the default self-signed certificate provided by DDEV.

### 2. **Update DDEV configuration (if necessary):**

Ensure that your DDEV configuration allows for HTTPS. DDEV should already be set up to support HTTPS by default, but if necessary, check your `ddev/config.yaml` file to ensure the following:

router_http_port: "80"
router_https_port: "443"

### 3. **Accessing Vite over HTTPS:**

Now, when you run `yarn run dev`, Vite will serve assets over HTTPS, matching the protocol used by your Laravel app. This should resolve the mixed content issue.

### 4. **Clear Cache and Rebuild:**

After making these changes, clear your browser cache and rebuild your assets:

yarn run dev

Then, reload the page to ensure the assets are loaded over HTTPS.

Let me know if you face any further issues!

User
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
plugins: [
laravel({
input: ['resources/js/app.js', 'resources/js/app-backend.js'],
refresh: true,
}),
vue({
template: {
transformAssetUrls: {
base: null,
includeAbsolute: false,
},
},
}),
],
server: {
host: '0.0.0.0', // Allows access from the Docker container
port: 5173, // Port Vite listens on
strictPort: true,
https: true, // Ensure Vite serves over HTTPS
watch: {
usePolling: true, // Add polling
interval: 1000,
ignored: ['**/node_modules/**', '**/.git/**', '**/storage/**', '**/vendor/**', '**/public/**'],
},
hmr: {
host: '0.0.0.0', // For Windows/Mac, use 'host.docker.internal'
port: 5173,
protocol: 'https', // Ensure HMR uses HTTPS
},
},
});

Assistant
Your Vite configuration looks almost correct for enabling HTTPS, but I see a few things that might still need attention to fully resolve the mixed content issue.

Here’s what you can try:

### 1. **Add SSL Certificate Configuration (if necessary):**

You have `https: true` set, but in some environments (like DDEV), you might need to specify the paths to the SSL certificates. If you haven't already, try adding the certificate paths explicitly:

import fs from 'fs';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/js/app.js', 'resources/js/app-backend.js'],
            refresh: true,
        }),
        vue({
            template: {
                transformAssetUrls: {
                    base: null,
                    includeAbsolute: false,
                },
            },
        }),
    ],
    server: {
        host: '0.0.0.0',  // Allows access from the Docker container
        port: 5173,       // Port Vite listens on
        strictPort: true,
        https: {
            key: fs.readFileSync('/path/to/your/ssl/private.key'), // Update the path to your private key
            cert: fs.readFileSync('/path/to/your/ssl/certificate.crt'), // Update the path to your certificate
        },   
        watch: {
            usePolling: true,   // Add polling
            interval: 1000,
            ignored: ['**/node_modules/**', '**/.git/**', '**/storage/**', '**/vendor/**', '**/public/**'],
        },
        hmr: {
            host: '0.0.0.0',  // For Windows/Mac, use 'host.docker.internal'
            port: 5173,
            protocol: 'https', // Ensure HMR uses HTTPS
        },
    },
});

If you are using **DDEV**, the certificates are typically stored under `.ddev/.ssl`. For example:

https: {
    key: fs.readFileSync('/var/www/.ddev/.ssl/dev.key'), // DDEV path to SSL private key
    cert: fs.readFileSync('/var/www/.ddev/.ssl/dev.crt'), // DDEV path to SSL certificate
},

### 2. **Check HMR Protocol:**

Make sure your **Hot Module Replacement (HMR)** is using HTTPS as well, which you already have set with `protocol: 'https'`. This ensures the HMR connection (which is WebSocket-based) runs over the same protocol as your page.

### 3. **DDEV Configuration:**

DDEV should already support SSL, but double-check that the project’s configuration has the right ports exposed:

router_http_port: "80"
router_https_port: "443"

Also, ensure that the site is being served over `https://` by DDEV. If it's not, you might need to enable HTTPS within the DDEV environment.

### 4. **Clear Cache:**

Once you make these updates, make sure to clear your browser cache or open a private/incognito window to avoid old content being cached. Additionally, rebuild your assets:

yarn run dev

### 5. **Verify Network Access:**

Since you're using DDEV, verify that the port `5173` is accessible via `https://` by navigating to the proper URL. You might need to access it using `https://shareyourthoughts.ddev.site:5173` if it's not automatically routing.

After these changes, your assets should load securely over HTTPS, resolving the mixed content warning. Let me know if it works or if you run into any issues!

Leave a Comment

Your email address will not be published. Required fields are marked *