如何自动testingnpm包的用户版本,而不是在持续集成上运行开发版本?
偶尔会发生一个模块的开发版本在我的开发工作区中工作,并传递给Travis-CI,但是在发布到npm之后,最终用户软件包被打破了。
例如,如果你使用一个应该在dependencies
但在devDependencies
中devDependencies
子模块,那么CI将会通过(但是还有很多其他可能的devDependencies
)。
你如何自动testing这个? 你使用外部绑定? 有秘密模块吗? 你有一个用户验收testing套件吗?
我使用Travis-CI的Github,但标准设置使用开发安装。
曾几何时,我发现npm
会让我发布不可卸载的软件包。 所以我已经添加了一个目标到我的Gruntfile
这样做:
-
发行
npm pack
,从我的来源创build一个包。 -
进入为了testing而创build的目录(由
Gruntfile
自动创build),使用npm install <path to the package created in the previous step>
安装新包。
我有一个发布新版本的目标,只有在上述步骤成功的情况下才会发布。
上面的步骤不会发现你在问题中提到的依赖性问题,但是可以很容易地扩展它来捕获它。 要做到这一点,我会添加一个或多个testing,导致在上面的步骤2中安装的软件包调用require
所有依赖。
我build议设置你自己的CI服务器,基本上做一件事, npm install package ; cd node_modules/package ; npm test
npm install package ; cd node_modules/package ; npm test
npm install package ; cd node_modules/package ; npm test
。 这将确保您的软件包至less可以安装在您的服务器上。
我听说Jenkins对此很有帮助(至less,这就是node.js核心团队似乎正在使用的),但是还没有任何第一手的经验。 我们只是计划在几个星期内进入。
此外,有一些外部模块,取决于你和testing它有点帮助。 🙂