10

I'm making a static multipage website with ViteJS (html, scss and JS) and I can't find the way to change the build path of html files to put them into the root of dist folder.

My project structure is:

├── dist
    └──...
    └──src
       └── pages
             └── some-page.html
    └──...
├── node_modules
├── src
    └── pages
        └── some-page.html
├── .gitignore
├── index.html
├── package-lock.json
├── package.json
└── vite.config.js

and I want:

├── dist
    └── ...
    └── some-page.html
    └── ...
├── node_modules
├── src
    └── pages
        └── some-page.html
├── .gitignore
├── index.html
├── package-lock.json
├── package.json
└── vite.config.js

my vite.config.js (as the documentation recommends) is:

const { resolve } = require('path')
const { defineConfig } = require('vite')

module.exports = defineConfig({
    build: {
        rollupOptions: {
            input: {
                main: resolve(__dirname, 'index.html'),
                multiminerales: resolve(__dirname, 'src/pages/some-page.html')
            }
        }
    }
})

So, I think I need to change the input object but I can't find any information about it, I know about public directory but it will break all my folders structure. What can I do?

3

2 Answers 2

0

You can use this configuration -

import { fileURLToPath, URL } from 'node:url'

    import { defineConfig } from 'vite'
    import vue from '@vitejs/plugin-vue'
    import vueJsx from '@vitejs/plugin-vue-jsx'

    export default defineConfig({
      root: resolve(path, 'templates'),
      base: 'https://aaronchristian.test/wp-content/themes/portfolio/',
      plugins: [vue(), vueJsx()],
      resolve: {
        alias: {
          '@': fileURLToPath(new URL('./src', import.meta.url))
        }
      },
      build: {
        rollupOptions: {
          input: {
            index: fileURLToPath(new URL('./src/main.js', import.meta.url)),
            'index.html': fileURLToPath(new URL('./templates/index.html', import.meta.url))
          },
          output: {
            dir: 'dist',
            entryFileNames: 'assets/[name].js',
            assetFileNames: 'assets/[name].[extname]',
            chunkFileNames: 'assets/[name].js'
          }
        }
      }
    })
Sign up to request clarification or add additional context in comments.

1 Comment

Having that code as a snippet makes no sense, as it cannot be run on its own. Please edit it to be just a plain code block (with the javascript language identifier).
-1
+400

Yeah, I faced such problem, too.

For me it works to move index.html to src/pages

Then in vite.config.js specify root: './src/pages'

So, your config may look like:

const { resolve } = require('path')
const { defineConfig } = require('vite')

module.exports = defineConfig({
    root: './src/pages',
    build: {
        rollupOptions: {
            input: {
                main: resolve(__dirname, 'src/pages/index.html'),
                multiminerales: resolve(__dirname, 'src/pages/some-page.html')
            }
        }
    }
})

1 Comment

The root option doesn't work if you want to use .env files or public folder. I'd like to just set output html path

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.