Это недавняя проблема.На днях все работало нормально.Единственное, что, по-моему, могло вызвать это, - удалить @ vue / cli и переустановить его.
Ну, вы правы в этом.До середины 2018 года у меня была структура папок, подобная
project
├── config
├── src // components, router, etc
├── static // images, robots.txt manifest, vendor css and whatnot
├── dist // not under version control, generated at deploy time
└── index.html // entry point
. При создании проекта папка dist
была очищена, затем фрагменты из src
, где она была скомпилирована, затемстатические файлы в static
копируются в dist
(это может произойти до компиляции файлов src, что угодно).
Моя конфигурация выглядела так:
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
]),
Где config.build.assetsSubDirectory
было dist
.
Перемотка вперед к текущему @ vue / cli (по состоянию на март 2019 г.), шаблон теперь использует webpack @ 4 вместо webpack @ 3, и некоторые значения по умолчанию изменились.В частности, они ожидают, что структура будет:
project
├── config
├── src
├── public // <── WHAIT!!! NO LONGER CALLED "static"
| └── index.html // <── NO LONGER IN ROOT
└── dist
Таким образом, в вашей конфигурации объявление
module.exports = {
outputDir: './public',
...
}
означает, что вы стираете public
во время сборки, тогда веб-пакет не может скопировать вашу общедоступнуюактивы из источника ресурсов по умолчанию в выходную папку, которая стала такой же.
Теперь, если вы проверяете, что на самом деле делает веб-пакет (из корневой папки вашего проекта)
vuw inspect > output.js
или
$(npm bin)/vue-cli-service > output.js
Вы увидите, что у output.js
есть блок в виде:
/* config.plugin('copy') */
new CopyWebpackPlugin(
[
{
from: '/home/user/project/public',
to: '/home/user/project/dist',
toType: 'dir',
ignore: [
'.DS_Store'
]
}
]
),
Если я изменил свой vue.config.js
на, как у вас
outputDir: "./public",
Последняя команда выдаст раздел с текстом:
/* config.plugin('copy') */
new CopyWebpackPlugin(
[
{
from: '/home/user/project/public',
to: '/home/user/project/public',
toType: 'dir',
ignore: [
'.DS_Store'
]
}
]
),
Что, очевидно, не имеет никакого смысла
TL / DR;
Не использовать public
в качестве выходной папки или найдите способ изменить папку статических ресурсов, для чего, я полагаю, вам нужно вручную настроить CopyWebpackPlugin
в вашем файле конфигурации vue.