gpt4 book ai didi

firefox-addon-webextensions - 使用 web-ext 进行不同的开发和构建配置

转载 作者:行者123 更新时间:2023-12-02 16:46:55 51 4
gpt4 key购买 nike

我正在处理一个浏览器扩展项目,并希望在 background.js 中使用不同的 URL在开发时间和构建时间。我想这样做而不必记住在开发和构建之间更改代码。对于服务器项目,我只使用 dotenv/环境变量,但这不适用于有效运行客户端的扩展。

background.js我有一个 fetch使用这个api_base_url (我们也开发 API);

...
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.storageoptions.js这不是我们要找的。

最佳答案

我已经想通了,但基本的答案是添加 webpack 并使用 dotenv-webpack 作为入口文件,例如 background.jscopy-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

关于firefox-addon-webextensions - 使用 web-ext 进行不同的开发和构建配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166173/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com