您如何处理删除npm软件包版本的人?

您如何处理删除npm软件包版本的人?,npm,Npm,今天我发现我的应用程序所依赖的npm包版本Babel 6.0.15已经从npm中删除 这导致了新pc上的编译失败,我不得不手动查找最接近的可用版本,以及影响相关软件包的所有级联版本更改 既然我知道npm包随时都可能丢失,那么处理npm包的最佳方法是什么 您是否将您的node_modules文件夹签入源代码管理 npm中是否有关于创建者可以删除哪些版本(主要版本、次要版本等)以及哪些版本更为“长期支持”且必须保留的规则 当新电脑上的“npm更新”失败时,您如何让npm在本地通知您,而不是悄悄地失

今天我发现我的应用程序所依赖的npm包版本Babel 6.0.15已经从npm中删除

这导致了新pc上的编译失败,我不得不手动查找最接近的可用版本,以及影响相关软件包的所有级联版本更改

既然我知道npm包随时都可能丢失,那么处理npm包的最佳方法是什么

  • 您是否将您的node_modules文件夹签入源代码管理
  • npm中是否有关于创建者可以删除哪些版本(主要版本、次要版本等)以及哪些版本更为“长期支持”且必须保留的规则
  • 当新电脑上的“npm更新”失败时,您如何让npm在本地通知您,而不是悄悄地失败

    • 思考了一会儿之后,我写了一篇总结,总结了我认为的最佳实践。转载如下:

      摘要

      • 指定所有npm模块的确切版本,例如“alt”:“0.17.8”
      • 将node_modules文件夹提交到源代码管理中
      • 不要使用DefinitelyTyped或任何其他外部库Typescript定义工具
      为什么?

      其中一些原则可能会引起争议,因此我的理由如下:

      指定所有npm模块的确切版本

      Semver(语义版本控制)说,只有在主要版本发生更改时,才会发生中断更改。所以你应该只说“alt”:“0.17”

      但我在实践中发现,即使是补丁更改(bug修复)也会破坏您的应用程序,因为依赖这些库的库通常期望特定版本中的一些微小行为不会改变。因此,为了使特定库的所有特定版本都能正常工作,它们需要依赖于其他库的精确版本

      将节点模块文件夹提交到源代码管理中

      我首先假设著名的npm库的所有版本都将无限期地保留在那里。但我随后发现,创建者经常从npm中删除他们软件的旧版本,这会打破你为应用程序配置的确切版本号依赖项的级联链

      是的,提交所有npm库将占用存储库中的空间,但它们毕竟是文本文件,而不是.dll,因此它们会被压缩得非常小。另一种选择是有一天你根本无法在一台新计算机上编译你的应用程序,因为一个库已经完全从npm中删除了

      不要使用DefinitelyTyped或任何其他外部库Typescript定义工具

      为您使用的外部工具提供编译错误是非常棒的。但我发现这不值得努力,因为:

      • 无法匹配定义文件版本号和npm库版本号,因此您得到的定义与正在使用的库不同步
      • 他们经常有虫子
      • 您在编译时捕获的类型错误可能会发生在您自己的应用程序中,而不是在您调用外部库的方式中
      不要将.d.ts文件用于外部库,只需说:

      declare module 'lodash'
      {
          let x: any;
          export = x;
      }
      

      或者在Typescript 1.8以后的版本中使用–allowJS标志。

      思考了一会儿之后,我写了一篇总结,总结了我认为的最佳实践。转载如下:

      摘要

      • 指定所有npm模块的确切版本,例如“alt”:“0.17.8”
      • 将node_modules文件夹提交到源代码管理中
      • 不要使用DefinitelyTyped或任何其他外部库Typescript定义工具
      为什么?

      其中一些原则可能会引起争议,因此我的理由如下:

      指定所有npm模块的确切版本

      Semver(语义版本控制)说,只有在主要版本发生更改时,才会发生中断更改。所以你应该只说“alt”:“0.17”

      但我在实践中发现,即使是补丁更改(bug修复)也会破坏您的应用程序,因为依赖这些库的库通常期望特定版本中的一些微小行为不会改变。因此,为了使特定库的所有特定版本都能正常工作,它们需要依赖于其他库的精确版本

      将节点模块文件夹提交到源代码管理中

      我首先假设著名的npm库的所有版本都将无限期地保留在那里。但我随后发现,创建者经常从npm中删除他们软件的旧版本,这会打破你为应用程序配置的确切版本号依赖项的级联链

      是的,提交所有npm库将占用存储库中的空间,但它们毕竟是文本文件,而不是.dll,因此它们会被压缩得非常小。另一种选择是有一天你根本无法在一台新计算机上编译你的应用程序,因为一个库已经完全从npm中删除了

      不要使用DefinitelyTyped或任何其他外部库Typescript定义工具

      为您使用的外部工具提供编译错误是非常棒的。但我发现这不值得努力,因为:

      • 无法匹配定义文件版本号和npm库版本号,因此您得到的定义与正在使用的库不同步
      • 他们经常有虫子
      • 您在编译时捕获的类型错误可能会发生在您自己的应用程序中,而不是在您调用外部库的方式中
      不要将.d.ts文件用于外部库,只需说:

      declare module 'lodash'
      {
          let x: any;
          export = x;
      }
      
      或者在Typescript 1.8之后的版本中使用–allowJS标志