使用javascript
在前端和后端之间共享代码的最佳方法是什么,特别是在nodejs
和angularjs
之间说?
我们在后端和前端都使用enums
和constant values
,例如error codes
。现在我们只是将每个更改复制并粘贴到两个平台上,这不是一个好的解决方案。还有一些可以共享的服务。
我见过browserify
等图书馆;但那不是我想要的。我正在maven dependency
中寻找与java
类似的解决方案。在java
中,可以使用maven
轻松共享库,而我无法在javascript
中找到类似的方法。
有没有办法隔离这些服务,并使用nodejs
和npm
独立使用angularjs
将其作为bower
依赖?或者在前端和后端之间共享相同代码的方法是什么?
答案 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进行更新时,我通过以下方式更新我的节点应用程序:
tar -czvf my-module.tar.gz -C my-module
npm install path/to/my-module-tar.gz
我通过以下方式更新我的客户:
bower install
或bower update