在AngularJS和Nodejs之间共享代码

时间:2014-07-31 22:10:26

标签: javascript node.js angularjs npm bower

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

我们在后端和前端都使用enumsconstant values,例如error codes。现在我们只是将每个更改复制并粘贴到两个平台上,这不是一个好的解决方案。还有一些可以共享的服务。

我见过browserify等图书馆;但那不是我想要的。我正在maven dependency中寻找与java类似的解决方案。在java中,可以使用maven轻松共享库,而我无法在javascript中找到类似的方法。 有没有办法隔离这些服务,并使用nodejsnpm独立使用angularjs将其作为bower依赖?或者在前端和后端之间共享相同代码的方法是什么?

2 个答案:

答案 0 :(得分:9)

有几种方法可以做到这一点。首先,您可以通过bower为前端代码创建一个新包,并通过npm创建后端代码。我有几个软件包发布到两个系统。

Install with Bower - 有关如何安装注册表中不存在的模块的信息

NPM Install docs - 使用npm安装的所有方法(带有auth的私有github:git+ssh://git@github.com/[org]/[repo]

只需使用您的共享数据创建一个新模块,然后使用两个包管理器进行安装。它们都允许您安装未发布的模块,因此如果它是私有数据,您可以保留它。

如果您的前端需要require.js,您可以使用amdefine之类的内容使其可用于您的节点后端,或者如果您只是使用旧版窗口代码,则可以执行以下操作:

var mydata = {};

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

如果您正在共享大量数据,我强烈建议您查看browserify以在commonjs中编写整个代码库并使用browserify生成客户端包。关于使用browserify有一个laundry list of resources,包括如何use browserify and angular together

的内容

答案 1 :(得分:1)

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

我的共享代码保存在目录(my-module)中。它有package.json和bower.json。

我的消费节点应用程序具有package.json依赖关系: "我的模块" :" x.y.z"

我的消费客户端有一个bower.json依赖关系: "我的模块" :" ../ relative / path / to / my-module"

当我对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(这会产生.tgz的node_modules / my-module)
  5. 提交更新的pac .modules / my-module.tgz
  6. 我通过以下方式更新我的客户:

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