我正在使用一个浏览器扩展项目,并希望在开发时和构建时在background.js中使用一个不同的URL。我想这样做,而不必记住在开发和构建之间更改代码。对于服务器项目,我只需使用dotenv/环境变量,但这对于有效运行客户端的扩展是不可用的。
在background.js中,我有一个使用这个api_base_url的fetch (我们也开发了api_base_url);
...
const api_base_url = 'http://127.0.0.1:8000/v1/'
...在我构建(web-ext build)之前,我必须手动构建类似的东西;
...
const api_base_url = 'http://a.domain.com/v1/'
...理想的情况是:
...
const api_base_url = ENV['API_BASE_URL']
...我会有一个.env在当地的开发;
API_BASE_URL='http://127.0.0.1:8000/v1/'和.env.production (或.env.build);
API_BASE_URL='http://a.domain.com/v1/'这也是manifest.json中的一个问题,我需要在permissions中白名单不同的URL。
"permissions": [
"storage",
"tabs",
"https://a.domain.com/v1/*",
"http://127.0.0.1:8000/v1/*"
]这不是每个用户运行时的选项,所以browser.storage和options.js不是我们要找的。
发布于 2020-02-12 12:15:26
我已经知道了这一点,但基本的答案是添加webpack,并使用dotenv-webpack作为输入文件,如background.js和copy-webpack-plugin的非条目文件,如manifest.json。这些插件将用来自process.env.YOUR_VARIABLE_NAME的值替换process.env.YOUR_VARIABLE_NAME中出现的字符串。
这真的发生了,我花了几次努力去理解它。
// .env
API_BASE_URL='http://127.0.0.1:8000/v1/'
// ./background.js
const api_base_url = process.env.API_BASE_URL
// manifest.json
"permissions": [
"tabs",
"process.env.API_BASE_URL*"
],
// webpack => ./dist/main.js
const api_base_url = 'http://127.0.0.1:8000/v1/'
// webpack => ./dist/manifest.json
"permissions": [
"tabs",
"http://127.0.0.1:8000/v1/*"
],这是webpack的配置;
// ./webpack.config.js
const CopyPlugin = require('copy-webpack-plugin')
const DotenvPlugin = require('dotenv-webpack')
module.exports = (env) => {
const dotenvPath = __dirname + '/.env.' + env
const replaceWithProcessEnv = (content) => {
for (var key in require('dotenv').config({ path: dotenvPath }).parsed) {
content = content.replace(new RegExp('process.env.' + key, 'g'), process.env[key])
}
return content
}
return {
plugins: [
new DotenvPlugin(
{
path: dotenvPath,
safe: true
}
),
new CopyPlugin(
[
{
from: 'src/manifest.json',
transform(content) {
return replaceWithProcessEnv(content.toString())
}
}
]
)
]
}
}我在这里做了一个完整的工作示例;https://github.com/paulmwatson/web-ext-environments
https://stackoverflow.com/questions/60166173
复制相似问题