O compartilhamento de código entre AngularJS e Nodejs
-
26-12-2019 - |
Pergunta
Qual é a melhor maneira de compartilhamento de código entre o frontend e back-end usando javascript
, especificamente dizendo entre nodejs
e angularjs
?
Coisa é que estamos usando o mesmo enums
e constant values
como error codes
em ambos os backend e frontend.Agora nós simplesmente copiar e colar cada alteração tanto da plataforma, o que não é uma boa solução.Existem também alguns serviços que podem ser compartilhados.
Eu tenho visto bibliotecas, tais como browserify
;mas isso não é exatamente o que eu estou procurando.Eu estou procurando uma solução semelhante para maven dependency
no java
.No java
, as bibliotecas podem ser facilmente compartilhados usando maven
, enquanto eu não encontrar um semelhante modo de fazer no javascript
.Existe uma maneira de isolar esses serviços e dar-lhes como dependência para nodejs
usando npm
e angularjs
usando bower
de forma independente?Ou quais são as maneiras para compartilhar o mesmo código entre o frontend e back-end?
Solução
Há várias maneiras para fazer isso.A primeira é que você pode fazer um novo pacote que é necessário através de bower para o front-end do código e via npm para o painel de código.Eu tenho vários pacotes publicado para ambos os sistemas.
Instalar com Bower -- informações sobre como instalar os módulos que não estão no registro
NPM Install docs -- todas as maneiras de instalar com o ngp (privada github com auth: git+ssh://git@github.com/[org]/[repo]
)
Basta criar um novo módulo com seus dados compartilhada e instale-a usando ambos os gerenciadores de pacotes.Ambos permitem que você instale um inédito módulo de então, se é privada de dados você pode mantê-lo como tal.
Se o seu front-end requer require.js
você pode usar algo como amdefine
para torná-lo disponível para o seu nó de back-end, ou se você está apenas usando o legado da janela de código, você pode fazer algo como:
var mydata = {};
if(typeof window !== 'undefined'){
window.mydata = mydata;
} else {
module.exports = mydata;
}
Se você estiver compartilhando um monte de dados que eu recomendo a olhar para browserify para escrever todo o seu código base no commonjs e usando browserify para gerar o pacote de cliente.Há um lista de lavandaria de recursos sobre o uso de browserify, incluindo coisas como use browserify e angular juntos
Outras dicas
Disclaimer - eu ainda estou desenvolvendo esta abordagem e um pouco de manual.Eu fiz isso usando a ngp, uma npm cli chamado pac, e bower.Pac vamos me evitar o uso de npm install
na produção, mantendo os módulos .os arquivos tgz (confirmadas para o projeto de controle de origem).Com o pac, quando alguém dá o nó de projecto, de execução pac install
em seguida, npm rebuild
em vez de npm install
.
Meu código compartilhado é mantido em um diretório (meu-módulo).Tem pacote.json e um pavilhão.json.
Meu consumir nó app tem um pacote.json dependência para:"o meu módulo" :"x.y.z"
Meu consumir cliente tem um pavilhão.json dependência para:"o meu módulo" :"../parente/path/to/my-módulo"
Quando eu fizer as atualizações para o meu módulo, eu atualizar o meu nó de aplicativo:
- Fazendo um tar.gz o conteúdo do meu-módulo:
tar -czvf my-module.tar.gz -C my-module
- Remover a versão antiga do nó de aplicativo node_modules
- Novamente
npm install path/to/my-module-tar.gz
- Novamente o pac (isso faz com que um .tgz de node_modules/meu-módulo)
- Cometer atualizado pac .módulos/meu-módulo.tgz
Eu atualizar o meu cliente por:
- Remover o antigo cliente/bower_components/meu-módulo
- Novamente
bower install
oubower update