Приложение Electron не будет установлено, если имя отличается от названия продукта

Я использую electron-forge для создания своего электронного приложения и создания дистрибутивов для моего проекта. Однако я столкнулся со странной ошибкой. Мое поле name в package.json с идентификатором status-client, а также мое поле productName.

С этими значениями, когда я запускаю команду electronic-forge, я получаю свой исполняемый файл, а затем могу установить его как шарм и найти свое приложение в разделе Utilities в Ubuntu.

Однако проблема возникает, когда я изменяю поле productName в моем файле package.json. Будет создан исполняемый файл, я могу его установить, но если я ищу свое приложение с его новым именем, я нигде его не могу найти.

Вот мой новый 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 <[email protected]>",
    "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 <[email protected]>",
    "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 Любые идеи, почему это происходит?


person Manos Kounelakis    schedule 14.08.2017    source источник


Ответы (2)


Это потому, что /usr/bin/<name> является символической ссылкой на /usr/lib/<name>/<name>, но исполняемый файл находится по адресу /usr/lib/<name>/<productName>.

Это делается здесь: 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

Мы можем исправить эту символическую ссылку, установив свойство bin для electronInstallerDebian:

{
    "name": "application-name",
    "productName": "Application Name",
    ...
    "config": {
        "forge": {
            ...
            "electronInstallerDebian": {
                "bin": "Application Name"
            }
            ...
        }
        ...
    }
    ...
}
person Alberto González Palomo    schedule 06.02.2018

Я вижу одну проблему:

   {
     "name": "application-name",

заменить "_"

"name": "application_name", 

и попробуй еще раз.

person Long Field    schedule 07.02.2018