为不同的NodeJS项目使用相同的代码库

时间:2017-03-10 05:11:55

标签: javascript node.js backend

现在我为我建立的系统获得了一个NodeJS后端。问题是我还需要为某些客户端特定需求维护后端的另一个实例,这两个实例共享70-80%的代码。目前我正在使用git分支来保持它们分开,我知道git并不打算这样做,所以我想知道是否有一些东西允许我有两个独立的项目共享一些代码库,类似于in flavour in机器人。

1 个答案:

答案 0 :(得分:1)

这样做的选择很少:

<强> 1。通过npm依赖项package.json安装您自己的模块作为单独的依赖项。

<强> 2。使用泊坞窗。

Docker是容器虚拟化引擎,允许您使用预先安装的基础架构/文件系统创建虚拟环境的映像

你只需要在里面安装一些linux操作系统,节点和你的模块来创建图像,你所需要的就是将你的唯一代码安装为&#34;卷&#34;到了容器,就是这样。

  • 使用nodejs官方图像 - 它拥有基本node.js env所需的一切 - 创建自己的图像。在您有/reusable_code文件夹和package.json创建Dockerile文件
  • 的文件夹中

Dockerfile:

 FROM node:6.9.2
 RUN mkdir app
 COPY ./reusable_code /app/reusable_code
 COPY ./package.json /app/package.json
 WORKDIR /app
 RUN npm install -g <your global modules> && npm install

现在运行docker build -t base-image-with-reusable-code .

它会将图像创建并标记为base-image-with-reusable-code

现在,一旦你想将它与任何唯一代码一起使用,你应该从代码所在的文件夹中使用它(假设所有唯一代码都使用上一步中使用的相同package.json依赖项 - 如果不是这样,则需要额外的步骤)

docker run -ti -v ./app.js:/app/app.js -v ./unique_code:/app/unique_code base-image-with-reusable-code node app.js

当然应该更正名称,如果您有不同的项目结构,那么更改应该反映出来。

第3。通过操作系统链接可重用代码模块文件夹

简单地说,只需从您的唯一代码项目根文件夹中ln -s /path/to/reusable/code ./resuable_code,然后使用它,假设它位于您链接到的每个唯一项目的根目录。

<强> 4。通过npm链接

链接可重用代码模块文件夹

根据@Paul的建议:

  

节点本机方式#3是通过npm链接,它设置符号链接并在package.json中引用它,以便您的代码可以将其视为外部模块

假设您在具有唯一代码文件夹的同一文件夹中具有可重复使用的代码文件夹:

npm link文档的修改示例:

       cd ~/projects/unique_project1  # go into the dir of your main project
       npm link ../reusable_code     # link the dir of your dependency

注意:所有解决方案都假设您有可重用代码的单独git项目。一般来说,这是一个很好的做法。