写点什么

npm 4.0 废弃 Prepublish 生命周期脚本

  • 2016-10-31
  • 本文字数:1146 字

    阅读完需:约 4 分钟

npm 发布了 4.0.0 版本,这是 2015 年发布 npm 3 之后的第一个语义化的主版本。

尽管依然是一个实验性的发布版本,v4 还是带来了一些破坏性的变更,包括重写的npm search、废弃prepublish以及npm scripts行为的变化。

Kat Marchán 是 npm 的软件工程师,他在 Github 上分享了这次升级的消息,他提到npm 之前的主版本更新曾经带来过非常严重的影响,但4.0 对开发人员日常使用所带来的影响会小得多,它的变化主要局限在命令行接口上,对更大的生态系统的影响很小。

Marchán 提到最新的这次发布也宣告一个时代的结束,npm 2.x 和 3.x 将会进入维护状态,“除了重要的缺陷修正和安全补丁”,它们将不会再进行更新。

关于npm search,Marchán 这样说到:

让我们面对这一问题——npm search已经不能正常运行了。这些年随着时间的推移,它变得越来越慢,除此之外,它已经到了一个临界点,我们已经无法将整个注册表元数据放到内存中了,试图使用这个命令的人会看到 node 将提示一个非常恐怖的内存溢出崩溃。

为了提升开发人员的体验,Marchán 说要彻底修改npm search,不过这尚需一段时间,但是团队已经重写了之前的实现,以便“在运行过程中从搜索端点和本地缓存中得到结果。”

4.0 还废弃了 npm 中的prepublish生命周期脚本,将其替换为prepare脚本。Marchán 告诉 InfoQ:“新脚本的运行方式完全相同,会有一个新的 prepublishOnly事件,只有进行 npm publish的时候,该事件才会执行。”

Marchán 说,只有当个人用户发布他们自己的包的新版本时,才会受到这个破坏性变化的影响,已经发布到 npm 注册表上的包已经超过了 350,000 个,这个更大的生态系统并不会受此影响。

对于用户来说,npm 4.0 版本的发布也使得 partial shrinkwraps 成为了历史, npm shrinkwrap 允许用户锁定整个依赖树,让每个包使用特定的版本,这样的话,两个不同的人或者在两个不同的时间点,能够执行两个不同的构建。

Marchán 这样说到:

如果在你的项目中有npm-shrinkwrap.json的话,那么 npm 将不会安装任何没有明确列出的包,除非它是devDependency。这为一些优化打开了方便之门,通过移除一些令人望而生畏的极端场景,npm shrinkwrap 的使用也会更加便利。如果你通过npm shrinkwrap --dev为 shrinkwrap 添加了devDependencies的话,我们会忽略package.json中的devDependency安装。

npm 最新的主版本不仅包含了破坏性的变更,在发出的请求中,npm 还会发送Npm-ScopeNpm-In-CI头信息,允许注册表实现感知用户 / 作用域的特性和服务。

4.0 将会成为 npm 官方的最新发布版本,4.0.1 版本很快也会推出,这个版本会包含一些小的功能提升。

npm 团队推荐开发人员将 npm 升级到最新版本,但是他们也会继续维护一个版本,用于 Node 的默认分发。

查看英文原文 npm 4.0 Deprecates Prepublish Lifecycle Script

2016-10-31 19:002628

评论

发布
暂无评论
发现更多内容

Arthas 实践——生产环境排查 CPU 飚高问题

阿里巴巴云原生

开源 云原生 中间件 Java 25 周年 Arthas

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

程序员小航

spring 源码 源码分析 ioc

我是如何使计算提速>150倍的

白日梦想家

Python 代码优化 Numpy

一枚程序猿的MacBook M1详细体验报告

Zhendong

磁盘到底是怎样工作的?一文理解硬盘结构

Guanngxu

操作系统

《华为数据之道》读书笔记:第 7章 打造“数字孪生”的数据全量感知能力

方志

数据中台 数字化转型

监控之美——监控系统选型分析及误区探讨

华章IT

运维 云原生 监控 Prometheus

利用 Arthas 解决启动 StandbyNameNode 加载 EditLog 慢的问题

阿里巴巴云原生

阿里云 开源 云原生 中间件 Java 25 周年

区块链如何助力精准扶贫?

CECBC

区块链 扶贫

第六周作业

Griffenliu

架构师训练营第 1 期 - 第 10 周 - 学习总结

wgl

极客大学架构师训练营

Scala语法特性(三):面向对象的独特点

正向成长

特质 样例类 case class Traits

使用 Go 实现 Async/Await 模式

Roc

channel goroutines Async Go 语言

【薪火计划】06 - 你推崇的领导方式是怎么样的?

AR7

管理

数字货币——货币的第四次革命

CECBC

数字货币

第六周学习总结

Griffenliu

Nginx的反向代理与负载均衡--配置Nginx

Linux服务器开发

nginx 负载均衡 反向代理 后端 Linux服务器

甲方日常 59

句子

工作 随笔杂谈 日常

面试无忧:源码+实践,讲到MySQL调优的底层算法实现

小Q

Java 数据库 学习 面试 算法

三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!

冰河

Docker 云原生 k8s

区块链政务系统开发解决方案

t13823115967

区块链+ 区块链开发落地 政务系统开发解决方案

架构师训练营第二周框架设计学习总结

Geek_xq

顶层设计已基本完备 数字货币将进入加速推进阶段

CECBC

数字货币

CPU飙高问题排查

程序猿玄微子

Spock单元测试框架实战指南四 - 异常测试

Java老k

单元测试 spock

《华为数据之道》读书笔记:第 6 章 面向“自助消费”的数据服务建设

方志

数据中台 数据仓库 数字化转型 数据治理

聊聊销售背后的策略

吴晨曦

创业 销售管理

二分发代码模板

小兵

免费下载O’Reilly出版社全新之作《建立机器学习流水线》

计算机与AI

学习

区块链开发落地,联盟链系统平台搭建

t13823115967

区块链 区块链开发落地 联盟链系统平台搭建

npm 4.0废弃Prepublish生命周期脚本_JavaScript_James Chesters_InfoQ精选文章