Мне нужно настроить пути вывода окончательной сборки, как описано ниже:
Мой проект 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 у меня есть эта папка.





После тестирования проблемы в моей сборке, я думаю, вам нужно два изменения:
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.
Я полагаю, ваш механизм развертывания позаботится об этом?