packer
packer copied to clipboard
How to use this tool?
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: https://github.com/nodegui/packer/issues/112
...and I find out electron's doc is more user friendly to a newbie...
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.
I'm in the same boat. Can't build for Windows at all.
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"
}
]
}
]
},
};
You should build a dist directory before packing it:
-
npm run build
- build via webpack your app into dist dir with .js and .node files -
npx nodegui-packer --init MyApp
- creates deploy dir with some meta files. -
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