在AngularJS和Nodejs之间共享代码

使用javascript在前端和后端之间共享代码的最佳方式是什么,特别是在nodejsangularjs之间nodejs angularjs

事情是我们在后端和前端使用相同的enumsconstant values ,如error codes 。 现在我们只是将每个更改复制到两个平台,这不是一个好的解决scheme。 还有一些可以共享的服务。

我见过像browserify这样的图书馆; 但那不是我正在寻找的。 我正在寻找类似于java maven dependency的解决scheme。 在java ,库可以使用maven轻松共享,而我无法在javascriptfind类似的方法。 有没有办法孤立这些服务,并将它们作为独立的使用nodejs使用npmangularjs依赖于nodejs ? 或者在前端和后端之间共享相同的代码的方式是什么?

有几种方法可以做到这一点。 首先是你可以制作一个新的包,这个包需要通过bower来获得前端代码,通过npm来获得后端代码。 我有几个包发布到这两个系统。

使用Bower安装 – 有关如何安装不在registry中的模块的信息

NPM安装文档 – 使用npm(私人github,auth: git+ssh://git@github.com/[org]/[repo] )安装的所有方法

只需使用共享数据创build一个新模块,然后使用软件包pipe理器进行安装。 他们都允许你安装一个未发布的模块,所以如果它是私人数据,你可以保持这样的。

如果你的前端需要require.js你可以使用像amdefine这样的amdefine来使你的节点后端可用,或者如果你只是使用传统的窗口代码,你可以做如下的事情:

 var mydata = {}; if(typeof window !== 'undefined'){ window.mydata = mydata; } else { module.exports = mydata; } 

如果您要共享大量数据,我强烈build议您浏览browserify,以commonjs编写整个代码库,然后使用browserify生成客户端软件包。 有关于使用browserify 的资源清单 ,包括如何使用browserify和angular度在一起的东西

免责声明 – 我仍在开发这种方法,这是一个小手册。 我用npm做了这个,叫做pac的npm cli,还有凉亭。 Pac让我避免在生产中使用npm install ,方法是将模块保存为.tgz文件(提交到源代码pipe理项目)。 用pac,当有人签出节点项目时,他们运行pac install然后npm rebuild而不是npm install

我的共享代码保存在一个目录(我的模块)。 它有package.json和一个bower.json。

我的消费节点应用程序有一个package.json依赖项:“my-module”:“xyz”

我的客户端具有bower.json依赖关系:“my-module”:“../relative/path/to/my-module”

当我更新我的模块时,我通过以下方式更新我的节点应用程序:

  1. 制作my-module内容的tar.gz: tar -czvf my-module.tar.gz -C my-module
  2. 从节点应用程序的node_modules中删除旧版本
  3. 重新运行npm install path/to/my-module-tar.gz
  4. 重新运行pac(这使得node_modules / my-module的.tgz)
  5. 提交更新的pac .modules / my-module.tgz

我更新我的客户:

  1. 删除旧的客户端/ bower_components / my-module
  2. 重新运行bower installbower update