Vue Cli 3: определенные пути вывода

Мне нужно настроить пути вывода окончательной сборки, как описано ниже:

Мой проект Vue по умолчанию является структурой, но пути вывода выходят за пределы этой структуры:

Выходной HTML-файл: ../main/resources/

Вывод всех файлов активов: ../main/assets/[js/css/img]

И в файле index.html путь, по которому можно найти ресурсы, должен быть «js / name.js» и т.п.

Мой текущий vue.config.js этого не обеспечивает:

module.exports = {
    chainWebpack: config => {
        config.module
            .rule('vue')
            .use('vue-loader')
            .tap(options => {
                return options;
            });
    },
    css: {
        sourceMap: true
    },


    baseUrl: '/',
    outputDir: '../main/resources/',
    assetsDir: '../main/assets/',
    runtimeCompiler: undefined,
    productionSourceMap: undefined,
    parallel: undefined,
    configureWebpack: {
        module: {
            rules: [
                {
                    test: /\.(png|jpg|gif)$/,
                    use: [
                        {
                            loader: 'file-loader',
                            options: {
                                outputPath: '../main/assets/img',
                                name: '../main/assets/img/[name].[ext]'
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Может кто поможет настроить этот файл? Спасибо!
С уважением
tschaefermedia

Извините, я был занят другими проектами. Теперь вернемся к VueJS.
Обновлено:
Я пробовал то, что было указано в сообщениях GIT. Мои файлы vue.config.js теперь выглядят так:

const path = require('path');
module.exports = {
    css: {
        sourceMap: true
    },

    devServer: {
        proxy: {
            '/api': {
                target: 'http://localhost:8080',
                'changeOrigin': true,
                'secure': false
            }
        }
    },
    baseUrl: '',
    outputDir: '../main/resources/',
    assetsDir: '../main/assets/',
    chainWebpack: config => {
        config.module
            .rule('vue')
            .use('vue-loader')
            .tap(options => {
                return options
            })
        config.module
            .rule('images')
            .test(/\.(png|jpe?g|gif|ico)(\?.*)?$/)
            .use('url-loader')
            .loader('url-loader')
            .options({
                name: path.join('../main/assets/', 'img/[name].[ext]')
            })
    }
}

Теперь все работает, как я хочу, но изображения не копируются в нужную папку. В ".../ресурсы/" у меня есть папка css и js, но нет папки img. В "... / ressources" рядом с моим файлом index.html у меня есть эта папка.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
1
15 116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После тестирования проблемы в моей сборке, я думаю, вам нужно два изменения:

vue.config.js

module.exports = {
  ...
  outputDir: '../main/resources/',
  assetsDir: '../assets/',
  ...
}

и забудьте о плагине webpack!

Ссылка config: assetsDir

assetsDir

Type: string

Default: ''

A directory (relative to outputDir) to nest generated static assets (js, css, img, fonts) under.

таким образом, активы попадут в ../main/resources/../assets/, что приравнивается к ../main/assets/.


Расположение изображения в проекте

Оптимальное расположение IMO (из тестирования) - использовать <project folder>/static, который является старой папкой CLI2 для статических ресурсов. Фактически подойдет любая папка вне src. Это делает то, что затем обрабатывается как есть, а не «упаковывается через Интернет».

См. Обработка статических активов

"Real" Static Assets ... In comparison, files in static/ are not processed by Webpack at all: they are directly copied to their final destination as-is, with the same filename.

Обратите внимание, что они действительно получают хеш-код версий (см. Ниже).

Это дает следующую структуру папок сборки:

../main
  assets/
    css/
    fonts/
    images/
    js/
  resources/
    index.html
    

В CLI 3 папка /static была изменена на /public/static, но если вы поместите туда свои изображения, копия дополнительный будет сделана под ../main/resources/static.

Если вы предпочитаете это расположение (чтобы оставаться стандартным), вы можете удалить эту копию с помощью сценария postbuild в package.json, например, используя npm run под Windows,

package.json

{
  ...
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "postbuild": "rd /s /q \"../main/resources/static/images\"",
    "lint": "vue-cli-service lint",
    "test:unit": "vue-cli-service test:unit"
  },
  "dependencies": {

Ссылки на изображения

В источнике я обнаружил, что относительные ссылки на изображения работают нормально.

Например,

import myPic from '../public/static/images/myPic.png'

меняется на

../assets/img/myPic.ec4d96e7.png

во встроенном app.js.

Обратите внимание на хэш, добавленный для управления версиями.


Обслуживание сборки

Я отмечаю, что структура папок, которую вы используете, не может быть обслужена простым http-server, так как index.html находится в main / resources, и этот сервер не может получать данные из main / assets.

Я полагаю, ваш механизм развертывания позаботится об этом?

Другие вопросы по теме