2016-05-12 3 views
0

J'ai une base de code pour les applications Web et NodeWebkit (NW). J'utilise la pile suivante: - React - Hapi - Sequelize - environnement WindowsNodeWebkit - déploie l'application

version Web de l'application utilise MySQL, tandis que NW utilise SQLite. Tout fonctionne bien. J'ai un fichier de configuration qui compile l'application pour ce dont j'ai besoin (web ou NW).

Le problème que je rencontre maintenant est de savoir comment déployer l'application NW. L'idée est de fournir une application NW à un client, où il l'ouvrira en cliquant sur l'icône.

Puisque j'utilise le Node pour la version NW, et que l'application utilise de nombreux modules qui sont stockés dans node_modules, je suis confronté à un défi consistant à tout emballer.

Mon idée est de faire un installateur Windows. L'utilisateur cliquera dessus et le programme d'installation extraira tous les fichiers vers la destination. Et faites également une icône sur le bureau de l'utilisateur pour l'exécuter.

Problème avec le nom de fichier Windows limitation. Dans les node_modules, de nombreux sous-répertoires ne respectent pas la limitation de Windows. Je ne peux même pas copier le dossier node_modules. Je ne peux même pas le supprimer. Bien sûr que je peux le copier Si je le zip ... ou supprimer manuellement les longs dossiers.

Je n'ai pas encore commencé à travailler sur l'installateur, mais je pense que je vais frapper le mur avec cette approche.

Est-ce que quelqu'un a une idée sur la façon de réaliser ce déploiement? Comment puis-je intégrer NPM3 dans NW?

Mon plan est maintenant de faire l'installation de Windows. Ce programme d'installation Windows installera normalement les fichiers de l'application. Les node_modules seront compressés précédemment et placés dans le programme d'installation. Le programme d'installation va alors simplement le décompresser dans le dossier de destionation.

Je vais poster mes progrès ici.

Mise à jour ici. Le problème principal ici était la profondeur des node_modules. J'ai plusieurs modules dans node_modules, et après réflexion, j'ai compris qu'il y avait une règle simple. Certains modules sont des modules côté serveur, tandis que d'autres sont utilisés par réagir. Et puisque Webpack crée déjà d'énormes fichiers dans lesquels tous les modules sont déjà inclus, je n'en ai tout simplement pas besoin du tout. J'ai donc enlevé tous les modules côté frontal (modules babel, reac- *), et côté serveur gauche seulement (Hapi, sequelize ...). Miracle est arrivé, l'application a fonctionné et était beaucoup plus rapide au démarrage. Je vais utiliser Inno setup pour créer un fichier manifeste, et ça devrait être bon à faire.

Je ne suis toujours pas hors de la zone de danger, car le développeur peut avoir besoin d'un module côté serveur, qui a une énorme profondeur. Mais je vais y réfléchir si cela arrive.

Plus à venir ...

Répondre

1

réellement nodejs vous pouvez effectuer les opérations suivantes:

1-Créer un autre dossier dans votre dossier de projet par exemple « server_modules »

2 Dans le dossier créé créer un autre fichier package.json et installer modules nécessaires pour le serveur là

3 Tous ces modules seront accessibles node_modules normales à l'aide require('module_name') et vous pouvez supprimer le dossier « server_modules » lorsque vous emballez votre version de bureau si vous ne avez pas besoin

Note: cette approche utilisée par certains développeurs pour réaliser des micro-services dans nodejs mais elle est utile dans votre cas

+0

Si je comprends bien. Je peux avoir deux dossiers avec des modules presque identiques. L'un est server_modules, et l'autre est desktop_modules. Si je dépose la version en ligne, je garde server_modules. Corrigez-moi si je me trompe, mais cela freinera l'application? Puisque le Node.js s'attend à trouver les modules dans les node_modules? –

+0

1- vous pouvez avoir des modules identiques ou des modules séparés tout fonctionne –

+1

2- l'idée que nodejs n'utilise pas seulement "node_modules" pour charger les modules qu'il utilise en priorité pour chercher le module en commençant par le dossier "node_modules" dans le même projet et il aura la plus haute priorité –