Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to use this tool? #161

Open
jackusay opened this issue Sep 4, 2021 · 4 comments
Open

How to use this tool? #161

jackusay opened this issue Sep 4, 2021 · 4 comments

Comments

@jackusay
Copy link

jackusay commented Sep 4, 2021

How to use this tool?

simplest package.json:

{
  "name": "banaur",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "qode ."
  },
  "author": "",
  "license": "",
  "dependencies": {
    "@nodegui/nodegui": "^0.37.3"
  }
}

all my code is a index.js:

const {
  QMainWindow,
  QWidget,
} = require('@nodegui/nodegui');

const win = new QMainWindow();
win.setWindowTitle('Password Generator');
win.resize(400, 200);

// Root view
const rootView = new QWidget();

win.setCentralWidget(rootView);
win.show();

global.win = win;

npx nodegui-packer --init MyAppName #generate display folder. I don't touch anything inside.

create a dist folder, then put all my code (just a index.js file) into this folder.

npx nodegui-packer --pack ./dist

result:

taye@taye-PC ~/Downloads/New folder (5)/d
λ nnpx nodegui-packer --pack ./dist
cleaning build directory at C:\Users\taye\Downloads\New folder (5)\d\deploy\win32\build
creating build directory at C:\Users\taye\Downloads\New folder (5)\d\deploy\win32\build
copying qode
copying dist
running windeployqt
stderr: Please specify the binary or folder.
stdout: Usage: C:\Users\taye\Downloads\New folder (5)\d\node_modules\@nodegui\nodegui\miniqt\5.14.1\msvc2017_64\bin\windeployqt.exe [options] [files]
Qt Deploy Tool 5.14.1

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays help on commandline options.
  --help-all                Displays help including Qt specific options.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --plugindir <path>        Copy plugins to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --pdb                     Deploy .pdb files (MSVC).
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-patchqt              Do not patch the Qt5Core library.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --qmlimport <directory>   Add the given path to the QML module search
                            locations.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-virtualkeyboard      Disable deployment of the Virtual Keyboard.
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --angle                   Force deployment of ANGLE.
  --no-angle                Disable deployment of ANGLE.
  --no-opengl-sw            Do not deploy the software rasterizer library.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level (0-2).

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets
script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webview

Arguments:
  [files]                   Binaries or directory containing the binary.

stderr:


(node:11736) UnhandledPromiseRejectionWarning: child process exited with code 1
(node:11736) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:11736) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

relative:
#112

...and I find out electron's doc is more user friendly to a newbie...

@samuelbsource
Copy link

I am in the same place as you, no idea how to package my app into .exe file.
Shipping the source code is probably the correct way to ship the app as per QT license but is arguably not user friendly (my audience is people without technical knowledge).
The way I wanted to resolve this is by letting them use .exe and download the source if they have to for whatever reason.

@imagitama
Copy link

I'm in the same boat. Can't build for Windows at all.

@amaillo
Copy link

amaillo commented Mar 25, 2023

Currently the README page does not mention it, but the "dist" folder content is make with webpack, so you must add it as a dev dependency. Webpack pack index.js in a .node file but some content can't be packed directly so need of plugins to be packed, so those need to be installed too.

The plugins used in the starter repo are ts-loader (for typescript), file-loader (for images) and native-addon-loader (for nodejs), to make them work, you will need a webpack.config.js file that will be in the root folder of your project.

In my particular case the webpack.config.js settings from the starter repo was not useful, i don't use typescript and native-addon+ file-loader were giving me two .node files that weren't working, so i ended up doing a different settings by using native-ext-loader since native-addon was hard to configure alone o_o, anyway, i will leave it here in case someone find it useful.

const path = require("path");


module.exports = {
  mode: process.NODE_ENV || "development",
  entry: "./src",
  target: "node",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "index.js"
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        use: [
          {
            loader: "native-ext-loader"
          }
        ]
      }
    ]
  },
};

@atellmer
Copy link

atellmer commented May 18, 2023

You should build a dist directory before packing it:

  1. npm run build - build via webpack your app into dist dir with .js and .node files
  2. npx nodegui-packer --init MyApp - creates deploy dir with some meta files.
  3. npx nodegui-packer --pack ./dist - packed app into .exe file if you are using windows platform.
    And your .exe app will be placed in path/to/app/deploy/win32/build

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants