Мы переписываем нашу существующую Angular 8 PWA в Vuejs, и мы столкнулись с несколькими проблемами, касающимися процесса сборки. (Мы здесь не для того, чтобы обсуждать причины такого выбора и чье-либо мнение о нем)
Наше приложение должно быть создано для разных клиентов с указанными c активами для каждого клиента (манифест. json файл, значки и изображения).
В Angular мы выполняем sh замену файла, определяя правила в angular. json файле, используя ключ fileReplacements, например:
"configurations": {
"production-customer-a": {
"fileReplacements": [
{
"replace": "src/manifest.json",
"with": "src/environments/customer-a/assets/manifest.json"
},
],
// Some more json stuff
Мы попытались реализовать аналогичный процесс в нашем vue приложении в vue .config. js, используя веб-пакет NormalModuleReplacementPlugin, например:
configureWebpack: () => {
let plugins;
switch (customer) {
case customer-a:
plugins = [
new NormalModuleReplacementPlugin(
/\.\.\/public\/manifest\.json/,
"../environments/customer-a/assets/manifest.json"
),
// Some more config
Это прекрасно работает, если заинтересованный на файлы фактически ссылаются в приложении , используя его URL при сборке . Позвольте мне объяснить на примере:
<img src="@/assets/myImageWhichShouldBeReplacedAtBuild.png" /> /* Will actually be replaced and the dist folder will contain the file properly */
<img src="@/assets/myImageWhichShouldBeReplacedAtBuildButIsBase64EncodedWithWebpackUrlLoader.png" /> /* Will be replaced as the base64 string but the dist folder wont contain the file and might be an issue if the image is to be used by files like manifest.json */
Последнее не является полной проблемой, поскольку мы можем переопределить url-загрузчик веб-пакета в vue .config. js , как объяснено здесь, Но все же это хороший улов:
Поскольку в шаблонах Vue мы не ссылаемся на такие файлы, как manifest. json или favicon.ico, эти файлы не заменяются .
Есть ли какой-нибудь способ убедиться, что каждый файл , который нам нужен, будет заменен при сборке для получения того же результата, что и angular. *1045*. json файл конфигурации? Может быть, использовать что-то отличное от NormalModuleReplacementPlugin?