Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 管理2+的开发;具有依赖项的nodejs包_Node.js_Git_Package_Npm - Fatal编程技术网

Node.js 管理2+的开发;具有依赖项的nodejs包

Node.js 管理2+的开发;具有依赖项的nodejs包,node.js,git,package,npm,Node.js,Git,Package,Npm,我正在开发2个node.js包,每个包都在自己的git存储库中管理。包B依赖于包A,因此我的本地目录结构如下所示: A1/ B/ node_modules/ A2/ 如果我更改了A1的本地代码,我希望在将其推送到公共存储库之前使用B对其进行测试。我该怎么做 在它的当前状态下,B有它自己的本地副本(A2),因此它引用的是不同的版本B是一个公共包,因此我希望避免直接修改B的源代码以引用A1 一个可能的解决方案是有两个B的本地副本:B1是发布的公共版本,它在本地依赖于A2,而B2是我自己

我正在开发2个node.js包,每个包都在自己的git存储库中管理。包
B
依赖于包
A
,因此我的本地目录结构如下所示:

A1/
B/
  node_modules/
    A2/
如果我更改了
A1
的本地代码,我希望在将其推送到公共存储库之前使用
B
对其进行测试。我该怎么做

在它的当前状态下,
B
有它自己的本地副本(
A2
),因此它引用的是不同的版本
B
是一个公共包,因此我希望避免直接修改
B
的源代码以引用
A1

一个可能的解决方案是有两个
B
的本地副本:
B1
是发布的公共版本,它在本地依赖于
A2
,而
B2
是我自己的私有版本,它使用类似
require('./../A1')
的东西直接引用
A1

这似乎有点难看(而且会迫使我维护2份
B
),我想知道是否有一种推荐的方法来处理这种情况


谢谢。

在最简单的情况下,符号链接就可以做到这一点。但是你可以更进一步,使用一些奇特的构建系统,比如咕噜、咕噜等等。 我所有的项目都使用经典的make脚本。因此,您可以在测试之前将一个项目复制到另一个项目中,例如:

NPM = /usr/bin/env npm
MODULES = ./node_modules/
PROJECTS_PATH = ../
DEPENDENCY = project_a/

default: test

test: copy
    $(NPM) test

copy:
    @rm -rf $(MODULES)$(DEPENDENCY)
    @cp -r $(PROJECTS_PATH)$(DEPENDENCY) $(MODULES)$(DEPENDENCY)

install:
    @rm -rf $(MODULES)
    $(NPM) install

.PHONY: test

这不是最好的构建脚本,但它可以完成这项工作。大多数unix系统将安装
make
。所以它也非常便携。

太棒了,谢谢!我刚刚还发现了
npm-link
,它将为我处理符号链接的创建。您的
makefile
解决方案(或grunt)适用于更复杂的设置。
NPM = /usr/bin/env npm
MODULES = ./node_modules/
PROJECTS_PATH = ../
DEPENDENCY = project_a/

default: test

test: copy
    $(NPM) test

copy:
    @rm -rf $(MODULES)$(DEPENDENCY)
    @cp -r $(PROJECTS_PATH)$(DEPENDENCY) $(MODULES)$(DEPENDENCY)

install:
    @rm -rf $(MODULES)
    $(NPM) install

.PHONY: test