[250115] pnpm v10 正式发布!安全性、性能和效率全面提升 | OCaml 5.3.0 发布

601 阅读6分钟

pnpm v10 正式发布!安全性、性能和效率全面提升

pnpm v10 带着一系列重大更新正式发布,在安全性、性能和效率方面都有显著提升!这次更新包含一些破坏性变更,升级前请务必仔细阅读以下内容:

🔄 主要变化:

  • 🚫 默认禁用依赖项的生命周期脚本执行:
    为了提高安全性,安装过程中默认不再执行依赖项的生命周期脚本。如需启用特定依赖项的脚本,请在 package.jsonpnpm.onlyBuiltDependencies 字段中列出它们。

  • 🆕 pnpm link 行为更新:
    pnpm link 命令现在会向根目录的 package.json 添加 overrides。在工作区中,override 将添加到工作区的根目录,将依赖项链接到工作区中的所有项目。全局链接:要全 局链接包,请从包的目录运行 pnpm link(之前需要使用 pnpm link -g)。

  • 🔒 使用 SHA256 进行安全哈希:
    多种哈希算法已更新为 SHA256,以增强安全性和一致性。

  • 🆕 配置更新:

    • manage-package-manager-versions
      默认启用。pnpm 现在默认根据 package.json 中的 packageManager 字段管理自身的版本。
    • public-hoist-pattern
      默认不提升任何内容。名称中包含 eslint 或 prettier 的包不再提升到 node_modules 的根目录。
    • virtual-store-dir-max-length
      Windows 上的默认值已减少到 60 个字符。
  • 📉 减少脚本的环境变量:
    脚本执行期间,设置的 npm_package_* 环境变量更少,仅保留 name、version、bin、engines 和 config。

  • 📥 即使 NODE_ENV=production 也安装所有依赖项。

  • 🗃️ 全局存储更改:
    存储版本提升至 v10。一些注册表允许在不同的包名称或版本下发布相同的内容。为了适应这种情况,存储中的索引文件现在使用内容哈希和包标识符进行存储。

  • 🗂️ 更有效的副作用索引:
    存储中索引文件的结构已更改。现在通过仅列出文件差异而不是所有文件来更有效地跟踪副作用。

⚠️ 其他破坏性变更:

  • # 字符现在在 node_modules/.pnpm 中的目录名称中转义。
  • 运行 pnpm add --global pnpmpnpm add --global @pnpm/exe 现在会失败并显示错误消息,指示您使用 pnpm self-update
  • 通过 URL 添加的依赖项现在会在 lockfile 中记录最终解析的 URL,确保完全捕获任何重定向。
  • pnpm deploy 命令现在仅适用于 inject-workspace-packages=true 的工作区。
  • 删除了从 lockfile v6 到 v9 的转换。
  • pnpm test 现在将 test 关键字后的所有参数直接传递给底层脚本。

🔄 次要变化:

  • 💪 新增“配置依赖项”支持: 这些依赖项在所有其他类型的依赖项(“dependencies”、“devDependencies”、“optionalDependencies”)之前安装。配置依赖项不能有自己的依赖项或生命周期脚本。

  • 🆕 新的设置:

    • verify-deps-before-run
      控制 pnpm 在运行脚本之前如何检查 node_modules。
    • inject-workspace-packages
      启用硬链接所有本地工作区依赖项,而不是符号链接它们。
  • ⚡ 更快的重复安装: 在重复安装时,pnpm 会执行快速检查以确保 node_modules 是最新的。

  • 🖥️ pnpm add 与默认工作区目录集成。

  • 📦 pnpm dlx 现在将包解析为其确切版本,并将这些确切版本用于缓存键。

升级到 pnpm v10 可以显著提升你的项目构建速度和安全性,但请务必注意上述的破坏性变更,并在升级前做好充分的测试。

来源:
github.com/pnpm/pnpm/r…

OCaml 5.3.0 发布

OCaml 是一种函数式、静态类型的编程语言,属于 ML 家族,提供了强大的模块系统,扩展了标准 ML 的模块系统,并且具有丰富的基于类的面向对象系统。

近日,OCaml 团队荣幸地宣布 OCaml 5.3.0 版本正式发布!此版本纪念 John William Mauchly 和 Paul Verlaine 的逝世周年。

5.3.0 版本带来了一些重要的改进和新特性:

主要亮点

  • 深度效果处理器语法:

现在可以使用专用语法安装深度效果处理器,例如:

match f () with
| x -> x
| effect Random_float, k -> Effect.Deep.continue k (Random.float 1.0)

新增的 effect 关键字可能会破坏现有代码,为了向后兼容,可以使用新的 -keywords 标志禁用此关键字。

  • 恢复 MSVC 端口:
    现在可以在 Windows 上使用 MSVC 工具链,恢复了 OCaml 4 中缺失的最后一个端口(除了不计划支持的 32 位架构的原生编译器)。

  • 重新引入统计内存分析 (statmemprof):
    Gc.memprof 子模块已恢复,API 略有不同。此模块可用于监控程序内部的内存分配统计信息。在 OCaml 5 中,可以独立监控每个域,而子域继承父域的分析配置文件(如果存在)。

  • UTF-8 编码的 Unicode 源文件和对 Unicode 标识符的初步支持:
    现在 OCaml 词法分析器支持在标识符中使用 Unicode 字符的子集,主要用于教学目的。需要 UTF-8 编码的 Unicode 文本源文件。例如:

    type saison = Hiver | Été | Printemps | Automne
    
  • 更高效的 Dynarray 实现:
    Dynarray 的内部实现现在使用非装箱表示,避免了将项目存储在 Some x 块中的需要,从而节省了空间和间接寻址。

  • 改进了 Merlin 的声明和定义元数据:
    cmt 文件中存储的元数据得到了改进,可以更好地地区分标识符的来源(以前的版本可能会混淆接口和实现标识符)。元数据现在更精确地跟踪声明和定义之间的关联。

增量更改

  • 标准库中新增了大约 20 个函数(在 DomainDynarrayFormatListQueueSysUchar 模块中)。
  • 运行时的许多修复和改进。
  • 改进了针对一流模块、函子、标记参数和类型冲突的错误消息。
  • 大量的错误修复。

安装说明

可以使用以下命令作为 opam switch 安装基础编译器:

opam update
opam switch create 5.3.0

源码可从 GitHub 和 Inria 的 OCaml 档案库获取。

更精细的编译器配置:

可以使用选项变体来调整编译器的配置:

opam update
opam switch create <switch_name> ocaml-variants.5.3.0+options <option_list>

其中 <option_list> 是一个以空格分隔的 ocaml-option-* 包列表。

完整更改列表请参阅官方公告中的 Changelog

值得关注的改进:
除了以上列出的主要特性外,此版本还包含许多其他改进,例如对 Windows 下 Unix.O_APPEND 的支持,ocamllex 对括号和花括号不匹配的错误捕获,以及对 IPv6 和 Unix 域套接字的 ocamldebug 远程调试支持。 这些改进进一步增强了 OCaml 的跨平台能力和开发体验。 5.3.0 版本的发布标志着 OCaml 在多核支持、Unicode 支持和工具链完善方面迈出了重要一步。 对于 OCaml 社区来说,这是一个令人兴奋的时刻。

来源:
discuss.ocaml.org/t/ocaml-5-3…




更多内容请查阅 : blog-250115


关注微信官方公众号 : oh my x

获取开源软件和 x-cmd 最新用法