Вероятно, для вас уже слишком поздно, но для других я продолжал обходить это.
Этот процесс все еще использует файл .env
для переменных, связанных с вашей средой.
Идея состоит в том, чтобы создать новый скрипт, который загружает файл .env
, который создает новый файл, заполненный переменными из файла .env
.
После процесса сборки мы просто импортируем новый сгенерированный файл в sw.js
для его использования.
Вот шаги.
Сначала создайте файл с именем swEnvbuild.js
, который будет вашим сценарием, который запускается после webpack
//swEnvBuild.js - script that is separate from webpack
require('dotenv').config(); // make sure you have '.env' file in pwd
const fs = require('fs');
fs.writeFileSync('./dist/public/swenv.js',
`
const process = {
env: {
VUE_APP_FCM_SENDER_ID: conf.VUE_APP_FCM_SENDER_ID
}
}
`);
Во-вторых, мы импортируем файл, сгенерированный из swEnvBuild.js
с именем swenv.js
, в наш sw.js
.
// sw.js
importScripts('swenv.js'); // this file should have all the vars declared
console.log(process.env.VUE_APP_FCM_SENDER_ID);
И, наконец, для того, чтобы это работало с одной командой, просто добавьте следующее в свои скрипты npm (при условии, что вы используете Linux / Mac).
scripts: {
"start": "webpack && node swEnvBuild.js"
}
Надеюсь, это должно сработать. Хотелось бы, чтобы был более чистый способ сделать это, поэтому я был бы рад узнать, как другие решения тоже.