Empacotando um webapp node.js como um aplicativo desktop normal [fechado]

86

Eu procurei um pouco, mas não consigo encontrar uma ferramenta existente para isso.

Eu tenho um servidor web node.js projetado para rodar em seu próprio computador que faz algumas coisas interessantes para você. Seria maravilhoso se eu pudesse clicar duas vezes em MySnazzyThing.appvez de instalar o nodejs e o npm e rodar node mysnazzyapp.jsna linha de comando.

O .appexecutável faria o spool do servidor de nó e abriria uma janela simples do webkit nativo que mostraria o que normalmente estaria ativado localhost:3000se eu estivesse executando na linha de comando.

Esse aplicativo nativo poderia então, digamos, ser distribuído por meio da loja de aplicativos mac. E bam, um aplicativo de desktop node.js.

Essa ferramenta existe? Ou há algum motivo técnico para que isso não funcione como eu imagino?

Alex Wayne
fonte

Respostas:

90

Opção 1: elétron (também conhecido como camada de átomo)

Este é o shell que o editor Atom do github usa. É muito semelhante ao node-webkit, embora execute o script primeiro e você precise criar uma visualização / janela para o usuário. Existem algumas outras pequenas diferenças, mas vale a pena dar uma olhada.


Opção 2: NW.js anteriormente node-webkit

A essência é que basicamente estende o mecanismo JS para que você escreva um aplicativo baseado na web que suporte o modelo de objeto estendido do nó e módulos ... você então empacota seus módulos package.json start.html e arquivos js em um zip (com o extensão .nw) e execute-o com nw (.exe) .. há versões do Windows, Mac e Linux disponíveis.


Opção 3: casca de Carlo chrom (ium) do Node.

Isso permitirá que você inicie o Chrome instalado localmente como um shell que pode se conectar a um aplicativo de servidor em execução local. Ele exige um cromo local, mas está muito próximo do que foi solicitado.


Opção 4: MacGapNode (apenas OSX)

MacGap com integração de Node (parece estar ficando obsoleto)


À parte: Serviços ...

Não posso falar em nome do OSX como um .App, mas pode ser possível criar uma instalação de serviço em segundo plano no NodeJS e um link para um site "local" no desktop. A maioria dos navegadores tem a opção de não mostrar todos os recursos (eu sei que o firefox em particular mostra).

Eu sei que sua pergunta é para OSX em particular, mas no Windows você pode usar o NSSM para executar qualquer coisa como um serviço, e eu o usei para serviços baseados em NodeJS no Windows. Eu acho que algumas das outras opções acima são melhores dependendo de suas necessidades.


Removido:


Esta resposta é copiada para várias perguntas, essas referências são principalmente para atualização de conveniência.

Tracker1
fonte
Para OSX e Linux, github.com/crcn/nexe também parece uma solução.
robocat
Parece que o node-webkit é o vencedor entre eles. Grande base de desenvolvedores, boa documentação, apoiada pela Intel.
Dan
gerty, obrigado ... Eu atualizei minha resposta para incluir o nexe, bem como tornei o node-webkit o primeiro lugar ... parece que os appjs podem estar ficando um pouco obsoletos.
Tracker1
Para OSX, verifique o Macgap para que você possa enviar para a app store. O Node webkit foi negado por usar uma API potencialmente desatualizada no futuro.
Michael J. Calkins
Hmm, agora é uma ideia. Execute o aplicativo como servidor em segundo plano e, em seguida, abra uma janela do navegador para ele (por exemplo, como posso iniciar um navegador sem moldura de janela ou abas / barra de endereço ). Você não obtém tanto controle sobre a janela dessa forma (por exemplo, o navegador lida com os itens de menu como arquivo, editar, visualizar, etc, e o usuário ainda tem acesso a recursos como impressão, zoom e in-page do navegador funções de pesquisa), mas basicamente não há nenhuma estrutura extra necessária.
Ajedi32
8

Eu sugiro olhar para o Topcube, seu objetivo é "Dar aos desenvolvedores de nó uma maneira de ter uma GUI de desktop para seus servidores de nó usando HTML5 + CSS3 como plataforma de GUI." Topcube no github .

Brian Heese
fonte
1
Topcube não parece ter suporte por muito mais tempo
Shamoon
Sim, sugiro pesquisar em Titanium. Não é Node.js, mas é baseado em JS e plataforma cruzada para PC e desenvolvimento de aplicativos móveis. appcelerator.com/products/…
Brian Heese
Esse link de titânio apodreceu. Suponho que este seja o que você está se referindo: docs.appcelerator.com/titanium/2.0/index.html Seu site opaco de marketing pesado com certeza torna difícil ver o que é seu produto, ou se importar.
Grumdrig
Nota: As peças da área de trabalho do Titanium não serão mais desenvolvidas / suportadas.
Sri Kadimisetty
1
O desenvolvimento do Titanium Desktop foi assumido por um novo grupo de desenvolvedores: tidesdk.org
Motin
-1

Atualmente, há uma infinidade de maneiras de fazer isso.

O vencedor claro no espaço de empacotar um aplicativo node + html5, é atualmente Electron (usado por Atom, VSCode, Slack, Discord, etc).

Você também pode usar qualquer outro pacote de idioma como um aplicativo (usando ferramentas para esses idiomas / pilhas) e verificar a instalação de um nó, iniciar o script "servidor" com o nó e, em seguida, iniciar o navegador padrão (ou algum componente de visualização da web, por alguns outros meios), finalmente definir a localização do serviço do nó. Este é um método muito leve e eficiente, porém não tão bem integrado com o SO como uma solução como o Electron.

O principal concorrente do Electron aqui é o NW.js. Pelo que eu posso dizer, o principal recurso do NW.js que o Electron (ainda) não possui é a compilação / ofuscação. Já o Electron facilita as atualizações automáticas.

https://electron.atom.io/ https://nwjs.io/

Devin McKeon
fonte