是否可以在Chrome扩展程序的manifest.json文件中设置环境变量?
lqn1987521 回答:manifest.json中的环境变量-Chrome扩展程序
就像wOxxOm所说的那样,我使用webpack处理manifest.json。
对于我来说,我需要在清单文件中自动设置版本。
我添加了webpack脚本:
plugins: [
new CopyWebpackPlugin([
{
from: "public/manifest.json",to: "manifest.json",transform(content,path) {
return modify(content)
}
}
]),]
然后Modify函数将文件的版本替换为参数:
function modify(buffer) {
var manifest = JSON.parse(buffer.toString());
let argv = process.argv[2];
if (argv) manifest.version = argv.split("=")[1];
let manifest_JSON = JSON.stringify(manifest,null,2);
return manifest_JSON;
}
所以,我的构建就像“ yarn build --version = x.x”一样,而webpack可以满足我的需求。
PS:如果要使用此功能,请记住进行更改:
-
manifest.json目录,如有必要;
-
修改函数中的值,在我的例子中是版本
正如OP在her answer中提到的那样,如果您要使用React构建Chrome扩展程序,则可以使用webpack.config.js
文件中的copy-webpack-plugin。但是,如果您的React应用基于create-react-app
,则直接编辑webpack.config.js
文件(位于node_modules/react-scripts/config
中)是not recommended。
在这种情况下,请使用craco,这是一个npm软件包,可用于基于create-react-app
定制应用程序。操作方法如下:
- 使用
npm i @craco/craco
将craco安装到您的项目中。 - 使用
copy-webpack-plugin
将npm i --save-dev copy-webpack-plugin
安装为项目中的开发依赖项。 - 假设我们正在创建Chrome扩展程序的开发和生产版本。还要假设我们已经在Chrome扩展程序的
"version": "0.1.0"
中分配了manifest.json
。根据构建类型的不同,我们想在Chrome扩展程序的version_name
中分配manifest.json
字段,例如,"version_name": "0.1.0 dev"
用于开发,"version_name": "0.1.0"
用于生产。在您的React应用程序的package.json
中,引入两个字段(脚本名称可以是您想要的任何名称),如下所示:"scripts": { ... "build-dev": "CRX_ENV=dev craco build",// or "set CRX_ENV=dev&& craco build" in the case of Windows "build-prod": "CRX_ENV=prod craco build",// or "set CRX_ENV=prod&& craco build" in the case of Windows ... }
- 在项目的根目录中创建一个名为
craco.config.js
的新文件。根据您的需要,在craco.config.js
文件中执行以下操作:const CopyPlugin = require("copy-webpack-plugin") module.exports = { webpack: { plugins: [ new CopyPlugin({ patterns: [ { from: "public/manifest.json",path) { return modifyManifest(content) },},],}),} function modifyManifest(buffer) { const manifest = JSON.parse(buffer.toString()) if (process.env.CRX_ENV === "dev") { manifest.version_name = `${manifest.version} dev` } else if (process.env.CRX_ENV === "prod") { manifest.version_name = `${manifest.version}` } const manifestJson = JSON.stringify(manifest,2) return manifestJson }
- 运行
npm run build-dev
。它将在项目根目录中创建一个名为build
的文件夹。这个build
文件夹是您解压缩的Chrome扩展程序,您可以使用chrome://extensions
页面上的“加载解压缩”按钮将其加载到Chrome中。加载后,您应该可以看到0.1.0 dev
作为Chrome扩展程序的版本名称。 - 删除上一步创建的
build
文件夹并运行npm run build-prod
,然后重复相同的步骤。您应该能够在0.1.0
页面上看到chrome://extensions
作为Chrome扩展程序的版本名称。