packer icon indicating copy to clipboard operation
packer copied to clipboard

Can't seem to build on windows

Open nguyennk opened this issue 4 years ago • 19 comments

packer version 1.4.0 Tried to build it on macOS - work great

Move repo to windows, pack using windows instruction npx nodegui-packer --pack ./dist

  • node 13
  • latest nodegui

image

Did I miss anything?

nguyennk avatar Apr 08 '20 18:04 nguyennk

Hi, Could you provide more logs ? Also can I take a look at the project code somewhere ? @nguyennk

a7ul avatar Apr 08 '20 18:04 a7ul

here are the full log

C:\Users\Administrator\Desktop\Tools\KU-NitroListener>npx nodegui-packer --init KU-NitroListener

C:\Users\Administrator\Desktop\Tools\KU-NitroListener>npx nodegui-packer --pack ./dist
cleaning build directory at C:\Users\Administrator\Desktop\Tools\KU-NitroListener\deploy\win32\build
creating build directory at C:\Users\Administrator\Desktop\Tools\KU-NitroListener\deploy\win32\build
copying qode
copying dist
running windeployqt
stderr: Please specify the binary or folder.


stdout: Usage: C:\Users\Administrator\Desktop\Tools\KU-NitroListener\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.

(node:372) UnhandledPromiseRejectionWarning: child process exited with code 1
(node:372) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:372) [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.

nguyennk avatar Apr 08 '20 18:04 nguyennk

dependencies

"dependencies": {
    "@nodegui/nodegui": "^0.18.2",
    "async": "^3.2.0",
    "axios": "^0.19.2",
    "bluebird": "^3.7.2",
    "debounce-promise": "^3.1.2",
    "discord.js": "^11.6.3",
    "fs": "^0.0.1-security",
    "hwid": "^0.1.1",
    "lodash": "^4.17.15",
    "moment": "^2.24.0",
    "qs": "^6.9.3"
  },
  "devDependencies": {
    "@babel/cli": "^7.8.4",
    "@babel/core": "^7.9.0",
    "@babel/preset-env": "^7.9.0",
    "@babel/preset-react": "^7.9.4",
    "@nodegui/packer": "^1.4.0",
    "@types/node": "^13.9.3",
    "eslint": "^6.8.0",
    "file-loader": "^5.1.0",
    "nodemon": "^2.0.2",
    "prettier": "^2.0.3",
    "rimraf": "^3.0.2"
  }

nguyennk avatar Apr 08 '20 18:04 nguyennk

Thanks i ll take a look and report back during this weekend (kindof swamped with work this week)

a7ul avatar Apr 08 '20 20:04 a7ul

Cool :)

nguyennk avatar Apr 09 '20 03:04 nguyennk

I'm encountering the same issue, any updates?

zombiestruck avatar May 07 '20 21:05 zombiestruck

I got the same problem in my project. Did I forget any parameter or setting? Interestingly the problem doesn't occur in my template 'nodegui-starter'.

I think there is a mistake in my project configuration ... but I have no idea which one.

===== UPDATE: I think I found the bug! My main-file was named cli.ts so I changed the default index.js to cli.js in the webpack.config.js. After that the builder hasn't worked anymore. Maybe the name index.js is hard-coded in the source code?

jrebmann avatar Jul 08 '20 12:07 jrebmann

I am having the same issue. Has anyone managed to resolve this yet?

davehibshman avatar Aug 07 '20 18:08 davehibshman

I had the same issue with a project I started from scratch which does not use webpack. nodegui-starter works fine for me too. Maybe I shouldn't be so stubborn and just use the starter as a base, but I like to understand all the components involved this way, sue me :-)

After a lot of comparing here's my conclusion. It's not really a proper solution as I suspect the file is platform-dependant after the npm install, but I thought I'd share it in case it helps anyone else:

Copy the file node_modules@nodegui\nodegui\build\Release\nodegui_core.node to whatever folder is passed to the packer. By default this is "dist", but since I had no compile step mine was "src". It's the path after "npx nodegui-packer --pack".

I noticed this file is copied to dist by webpack, and there is a native-addon-loader in the config, but I'm not proficient enough to figure out how it knows about that exact file.

MvRens avatar Aug 17 '20 15:08 MvRens

Hey @MvRens The native addon loader just copies all *.node files it encounters which is the standard extension for all nodejs native modules. They are basically renamed versions of .dll, .dylib files.

a7ul avatar Aug 17 '20 17:08 a7ul

I have same issue with vue-nodegui-starter: app compile and runs from npm run start, packer build all but app does not launch: nothing happen. Also launching from powershell/cmd has no result.

Only changing the emitted file from main.js to index.js made it work (partially: a linked image files is not linked thus not displayed, and I cannot be sure about a linked ps1 script (included with file-loader and working in npm run start).

costafrancesco94 avatar Dec 24 '20 17:12 costafrancesco94

I solved my issue by changing a little bit the webpack.config.js. I can confirm you can build (and pack also) on win and linux with this config

package.json

{
  "name": "@asd/node-gui",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "build": "webpack -p",
    "start": "webpack -p && qode ./dist/index.js",
    "debug": "webpack -p && qode --inspect ./dist/index.js",
    "pack": "npx nodegui-packer --pack ./dist"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@nodegui/nodegui": "^0.28.0",
    "@nodegui/vue-nodegui": "^0.0.5",
    "@vue/compiler-sfc": "^3.0.4",
    "css-loader": "^5.0.1",
    "express": "^4.17.1",
    "file-loader": "^6.2.0",
    "hertzy": "^0.1.1",
    "mini-css-extract-plugin": "^1.3.3",
    "node-loader": "^0.6.0",
    "open": "^7.3.0",
    "url-loader": "^4.1.1",
    "vue": "^3.0.4",
    "vue-loader": "16.0.0-beta.7",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.12"
  },
  "devDependencies": {
    "@nodegui/packer": "^1.4.1"
  }
}

webpack.config.js

const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');
const { compilerOptions } = require('@nodegui/vue-nodegui/dist/vueLoader');

// const CopyPlugin  = require("copy-webpack-plugin");

module.exports = (env = {}) => ({
    mode: env.prod ? 'production' : 'development',
    devtool: 'inline-source-map',
    entry: './src',
    target: 'node',
    output: {
        path: path.resolve(__dirname, 'dist'),
        //publicPath: '/dist/',
        filename: "index.js"
    },
    // node: {
    //     __dirname: false,
    //     __filename: false
    // },
    resolve: {
        extensions: ['.ts', '.js', '.vue', '.json'],
        alias: {
            vue: path.resolve(__dirname, './node_modules/@nodegui/vue-nodegui/dist'),
        },
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                use: {
                    loader: 'vue-loader',
                    options: {
                        compilerOptions,
                    },
                },
            },
            {
                test: /\.node$/,
                use: [{ loader: 'node-loader' }, { loader: 'file-loader' }],
            },
            {
                test: /\.(png|jpe?g|gif|svg|bmp|ps1)$/i,
                use: [{
                    loader: 'file-loader',
                    options: {
                        publicPath: "dist"
                    }
                }],
            },
        ],
    },
    plugins: [
        new VueLoaderPlugin(),
        /*new CopyPlugin({
            patterns: [
                { from: "web/dist", to: "web" },
            ],
        }),*/
    ],
});

costafrancesco94 avatar Dec 27 '20 22:12 costafrancesco94

This is still a problem as of 2021-10-21. I get all kinds of errors when running

create-react-app --template react-nodegui rn-starter

Such as...

[os] external "os" 42 bytes {main} [built]
[path] external "path" 42 bytes {main} [built]
[url] external "url" 42 bytes {main} [built]
[util] external "util" 42 bytes {main} [built]
    + 424 hidden modules

ERROR in ./node_modules/@nodegui/nodegui/dist/lib/utils/addon.js
Module not found: Error: Can't resolve '../../../build/Release/nodegui_core.node' in 'C:\Users\User\Downloads\rn-starter\node_modules\@nodegui\nodegui\dist\lib\utils'
 @ ./node_modules/@nodegui/nodegui/dist/lib/utils/addon.js 3:14-65
 @ ./node_modules/@nodegui/nodegui/dist/lib/QtGui/QApplication.js
 @ ./node_modules/@nodegui/nodegui/dist/index.js
 @ ./src/app.tsx
 @ ./src/index.tsx
 @ multi webpack/hot/poll?100 ./src/index.tsx
ERROR in C:/Users/User/Downloads/rn-starter/node_modules/@types/react-reconciler/node_modules/@types/react/index.d.ts(3086,19):
TS2320: Interface 'ElementClass' cannot simultaneously extend types 'Component<any, {}, any>' and 'Component<any, {}, any>'.
  Named property 'props' of types 'Component<any, {}, any>' and 'Component<any, {}, any>' are not identical.
ERROR in C:/Users/User/Downloads/rn-starter/node_modules/@types/react-reconciler/node_modules/@types/react/index.d.ts(3086,19):
TS2320: Interface 'ElementClass' cannot simultaneously extend types 'Component<any, {}, any>' and 'Component<any, {}, any>'.
  Named property 'refs' of types 'Component<any, {}, any>' and 'Component<any, {}, any>' are not identical.
ERROR in C:/Users/User/Downloads/rn-starter/node_modules/@types/react-reconciler/node_modules/@types/react/index.

That goes on for awhile....

asheroto avatar Oct 21 '21 06:10 asheroto

Is this still being looked into?

imagitama avatar Jan 04 '23 07:01 imagitama

It's looking for the .node file located at node_modules@nodegui\nodegui\build\Release\nodegui_core.node in build/dist for the plugins. The default webpack configuration copies it to the ./dist/ every build.

I'm using esbuild though and so I copy the file after the esbuild is complete and things work properly.

onfire4g05 avatar Aug 27 '23 16:08 onfire4g05