【问题标题】:Electron app won't install if name is different than product name如果名称与产品名称不同,将不会安装 Electron 应用程序
【发布时间】:2017-08-14 23:59:37
【问题描述】:

我正在使用electron-forge 创建我的电子应用程序并为我的项目创建可分发文件。但是我遇到了一个奇怪的错误。 我在package.json 中的name 字段是status-client,我的productName 字段也是如此。

当我运行 electron-forge make 时,有了这些值,我得到了我的可执行文件,然后我可以像魅力一样安装它,并在 Ubuntu 的 Utilities 部分找到我的应用程序。

但是,当我更改我的package.json 文件中的productName 字段时,问题就出现了。可执行文件将被创建,我可以安装它,但是如果我用它的新名称搜索我的应用程序,我在任何地方都找不到它。

这是我的新package.json

{

    "name": "status-client",
    "productName": "Foo",
    "version": "1.0.4",
    "description": "Monitor when your raspberry pi goes online and when offline with desktop notifications",
    "main": "src/index.js",
    "scripts": {
        "start": "electron-forge start",
        "package": "electron-forge package",
        "make": "electron-forge make",
        "lint": "eslint src"
    },
    "keywords": [],
    "author": "Manos Kounelakis <pkounelios@gmail.com>",
    "license": "MIT",
    "config": {
        "forge": {
            "make_targets": {
                "win32": [
                    "squirrel"
                ],
                "darwin": [
                    "zip"
                ],
                "linux": [
                    "deb"
                ]
            },
            "electronPackagerConfig": {
                "packageManager": "npm"
            },
            "electronWinstallerConfig": {
                "name": "status_client"
            },
            "electronInstallerDebian": {},
            "electronInstallerRedhat": {},
            "github_repository": {
                "owner": "",
                "name": ""
            },
            "windowsStoreConfig": {
                "packageName": "",
                "name": "statusclient"
            }
        }
    },
    "dependencies": {
        "electron-compile": "^6.4.1"
    },
    "devDependencies": {
        "babel-plugin-transform-async-to-generator": "^6.24.1",
        "babel-preset-env": "^1.6.0",
        "babel-preset-react": "^6.24.1",
        "electron-prebuilt-compile": "1.7.5",
        "eslint": "^3.19.0",
        "eslint-config-airbnb": "^15.1.0",
        "eslint-plugin-import": "^2.7.0",
        "eslint-plugin-jsx-a11y": "^5.1.1",
        "eslint-plugin-react": "^7.2.0"
    }
}

使用上面的 package.json,我得到了可执行文件并安装了它,但是如果我在我的程序中搜索 Foo,我什么也得不到。

这里是原文package.json

{
    "name": "status-client",
    "productName": "status-client",
    "version": "1.0.4",
    "description": "Monitor when your raspberry pi goes online and when offline with desktop notifications",
    "main": "src/index.js",
    "scripts": {
        "start": "electron-forge start",
        "package": "electron-forge package",
        "make": "electron-forge make",
        "lint": "eslint src"
    },
    "keywords": [],
    "author": "Manos Kounelakis <pkounelios@gmail.com>",
    "license": "MIT",
    "config": {
        "forge": {
            "make_targets": {
                "win32": [
                    "squirrel"
                ],
                "darwin": [
                    "zip"
                ],
                "linux": [
                    "deb"
                ]
            },
            "electronPackagerConfig": {
                "packageManager": "npm"
            },
            "electronWinstallerConfig": {
                "name": "status_client"
            },
            "electronInstallerDebian": {},
            "electronInstallerRedhat": {},
            "github_repository": {
                "owner": "",
                "name": ""
            },
            "windowsStoreConfig": {
                "packageName": "",
                "name": "statusclient"
            }
        }
    },
    "dependencies": {
        "electron-compile": "^6.4.1"
    },
    "devDependencies": {
        "babel-plugin-transform-async-to-generator": "^6.24.1",
        "babel-preset-env": "^1.6.0",
        "babel-preset-react": "^6.24.1",
        "electron-prebuilt-compile": "1.7.5",
        "eslint": "^3.19.0",
        "eslint-config-airbnb": "^15.1.0",
        "eslint-plugin-import": "^2.7.0",
        "eslint-plugin-jsx-a11y": "^5.1.1",
        "eslint-plugin-react": "^7.2.0"
    }
}

现在有了最后一个 package.json,我得到了我的可执行文件。我可以安装它,当我在我的程序中搜索 status-client 时,我会找到它。

我在运行electron-forge make 时没有遇到任何错误 任何想法为什么会发生这种情况?

【问题讨论】:

    标签: ubuntu debian electron deb electron-forge


    【解决方案1】:

    这是因为/usr/bin/&lt;name&gt; 是指向/usr/lib/&lt;name&gt;/&lt;name&gt; 的符号链接,但可执行文件位于/usr/lib/&lt;name&gt;/&lt;productName&gt;

    在这里完成: https://github.com/unindented/electron-installer-debian/blob/master/src/installer.js#L232

    options.bin 在以下位置设置为 pkg.name: https://github.com/unindented/electron-installer-debian/blob/master/src/installer.js#L12

    我们可以通过设置electronInstallerDebianbin 属性来更正那个符号链接:

    {
        "name": "application-name",
        "productName": "Application Name",
        ...
        "config": {
            "forge": {
                ...
                "electronInstallerDebian": {
                    "bin": "Application Name"
                }
                ...
            }
            ...
        }
        ...
    }
    

    【讨论】:

      【解决方案2】:

      我能看到的一个问题是:

         {
           "name": "application-name",
      

      将“-”替换为“_”

      "name": "application_name", 
      

      然后再试一次。

      【讨论】:

        猜你喜欢
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多