manifest.json中的环境变量-Chrome扩展程序

是否可以在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-pluginnpm 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扩展程序的版本名称。
本文链接:https://www.f2er.com/3142968.html

大家都在问