Bonjour!

Je dois programmer une appli nodeJS en mode "plugins externes". Je m'explique :

J'ai fait un POC que vous trouverez en bas du post. Mon but est qu'un script compilé avec pkg puis lancer des scripts/modules/plugins externes (appelez ceux-ci comme vous voulez).
Ces scripts externes sont développés en nodeJS, et donc requièrent des modules NodeJS et c'est là que ça me pose problème.

Si j'ai bien compris comment fonctionne pkg, pour build le .exe il regarde dans le script qu'on lui passe (dans mon exemple main.js) pour trouver tous les 'require' et inclure les modules dans le .exe .

Je ne veux pas que ces scripts externes et leurs modules soit ajoutés dans le .exe. Cette partie est ok : dans main.js je passe des variables dans les requires donc pkg ne peut pas les intégrer.
Le problème c'est que quand je lance mon .exe, il essait de me charger le script externe mais plante car ce dernier à besoin du module fs-extra qui n'est pas inclu..

Exemple :
1) lancer service.exe
2) service.exe require le script externe "externalScript"
3) externalScript.js require le module "fs-extra"
4) ERREUR : il ne trouve pas le module "systeminformation"

Si vous souhaitez essayer, après un 'npm install'
  • en dev : 'npm start'
  • avec le .exe : 'npm run pkg' pour build l'exe. Ensuit déplacer le .exe et le dossier 'test' et son contenu AILLEURS, quelques part ou il n'y a pas de "node_modules"



Merci à tous ceux qui m'ont lu!

Voici les fichiers :
./mains.js :
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const path = require ('path');
 
var filePath = path.join(process.cwd(), 'test', 'externalScript');
try {
	var run = require(`${filePath}`);
	run();
}
catch(ex) {
	console.log(`!!!!! AN ERROR OCCURED !!!!!`);
	console.log(ex.message);
}
finally {
	console.log('Press any key to exit');
	process.stdin.setRawMode(true);
	process.stdin.resume();
	process.stdin.on('data', process.exit.bind(process, 0));
}

./package.json
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "name": "test-node-import",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "start": "node ./main.js",
    "pkg": "pkg --target=latest-win-x64 -o service ./main.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "fs-extra": "^8.0.1",
    "pkg": "^4.3.8",
    "systeminformation": "^4.9.2"
  }
}

./test/externalScript.js :
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const path = require('path');
const fse = require('fs-extra');
const si = require('systeminformation');
 
const options = {
  spaces: 2 // indent
}
 
module.exports = function () {
	var filePath = path.join(process.cwd(), 'output', 'output.json');
 
	fse.ensureFileSync(filePath);
 
	si.cpuFlags()
  .then(function (data) {
  	fse.writeJsonSync(filePath, data, options, err => {
	    if (err) return console.error(err)
	    console.log(`${file} saved!`);
	  })
  })
  .catch(error => {
    console.log('!!!!!ERROR on cpuFlags : ' + error);
  });
};