今天我发现我的应用依赖的npm包版本Babel 6.0.15已从npm删除。
这导致新PC上的编译失败,我不得不手动找到它最接近的可用版本,并且所有级联版本都会更改它对相关软件包的影响。
处理npm包的最佳方法是什么,现在我知道他们可以随时丢失?
答案 0 :(得分:0)
在考虑了这一段时间后,我写了blog post总结了我认为最佳做法。转载如下:
<强>摘要强>
<强>为什么吗
其中一些原则可能会引起争议,所以这是我的理由:
指定所有npm模块的确切版本
Semver(语义版本控制)表示只有在主要版本发生变化时才会发生重大变化。所以你应该只能说“alt”:“0.17”
但是我在实践中发现即使修补程序更改(错误修正)也可能会破坏您的应用程序 - 因为依赖这些库的库通常期望特定版本中的某些微小行为不会改变。因此,为了使特定库的所有特定版本都能工作,它们需要依赖其他库的精确版本。
将node_modules文件夹提交到源代码管理
我首先假设所有版本的着名npm库都会无限期地保留在那里。但后来我发现创建者经常从npm中删除旧版本的软件 - 然后打破了为应用程序配置的确切版本号依赖关系的级联链。
是的,提交你所有的npm库会占用你的存储库中的空间,但它们毕竟是文本文件,而不是.DLL,因此它们会被压缩得非常小。另一种选择是有一天根本无法在新计算机上编译您的应用程序,因为库已从npm完全删除。
不要使用DefinitelyTyped或任何其他外部库Typescript定义工具
为您使用的外部工具提供编译错误真是太好了。但我发现它不值得付出努力,因为:
不要使用外部库的.d.ts文件,而是说:
declare module 'lodash'
{
let x: any;
export = x;
}
或者在Typescript 1.8之后使用-allowJS标志。