热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【第1177期】新的包名规则

前言听说现在注册包名跟域名一样,好的名字能带来不少的流量。今日早读文章由众成翻译@WaterMelon643翻译分享。正文从这开始~最近我们对于包的命名方式进行了一些修

前言

听说现在注册包名跟域名一样,好的名字能带来不少的流量。今日早读文章由众成翻译@WaterMelon643翻译分享。

正文从这开始~

最近我们对于包的命名方式进行了一些修改,为的是更好的防御「误植」攻击,同时帮助包开发者们挑选出更加合适的包名。

可能你已经阅读过我们之前发布的文章 npm注册表上的误植攻击。我们对这一事件的回应是对于那些与已有包名类似的包采用内部工具进行识别。我们一直在亲自回顾着这些并且将在一些案例上采取措施。在这些包当中我们所注意到的一些趋势正引导我们去相信,我们可以鼓励人们更好地为包命名,从而能够满足注册用户以及包开发者的需求。具体一点来说,与现有包名仅在标点上不同的包就不可以再发布了。

包名可以包括标点符号、破折号和下划线 (., -, _)等。 这些标点可以使包名变得简单易懂!比如react-native 就比 reactnative 更加的一目了然。 但是,许多存在「误植」攻击的名字故意通过标点符号来进行监听。比如, 在这种事情发生之前,你可以将react-native的包命名为reactnative来发布,但是在我们新的命名规则之下,是不允许的。

下面就来详细的讲一下这种变化。

新的规则

如果你要发布一个新的包——也就是这个包在注册表中从来没有被发布过——我们把包名中的标点符号去掉并与现有的包进行比较。如果包名中不存在标点符号,我们是不允许创建这个包的。相反,我们建议在自己的作用域之下以此名字来发布包。当然,你还可以找到一个与现有包名完全不同的新名称,但是用自己的作用域是更快的一种方式。

这里有一些实例来说明差异。

由于react-native已经存在,这样的就不可以再发布了:

  • reactnative

  • react_native

  • react.native

类似的,由于jsonstream已经存在了,这样的就不能再发布了:

  • json-stream

  • json.stream

  • json_stream

  • json-stream

使用作用域!

如果因为你起的包名与现有的包名太相近而被阻止发布这个包,那么找到一个独一无二包名最简单方法就是使用你的作用域。你可以使用@+你的npm用户名加在包名前面将包划到你的npm账户作用域下。比如,我的npm用户名是ceejbot,所以我的作用域是@ceejbot

在你自己的作用域下发布一个包是免费的!你可以这样去做:

我已经知道json-stream与现有包名太接近了,所以我需要找到一个新的名字。首先,我需要编辑我的package.json文件,添加我的npm账户名来划分一个作用域,所以:

{
   
"name": "json-stream"
}

修改为:

{
   
"name": "@ceejbot/json-stream"
}

然后我要发布这个包。被划了作用域的包默认是私有的,所以要通过—access=public 让它变为公有的包:

> npm publish --access=public
+ @ceejbot/json-stream@1.0.0

每个人都可以向npm注册表中发布公共的作用域包,但是你想发布私有的包就要付费订阅了。要了解更多关于作用域包的信息,请查看我们的文档。

关于包命名的历史

在npm注册表上,包名的历史是一个很小心的地添加条件限制的过程。在最早的时候,npm允许在包名上添加url安全字符,包括大写和小写字母。但是现在创建的包名中不能再有大写字母了,但是在npm注册表中那些包名中有大写字母的包依然存在也依然在使用,包名仅仅在大小写上的差异让我们第一次遇到了误植事件!

可能大多数人遇到的例子是jsonstream。JSONStream  jsonstream 是不同的包但是很难区分。如果你在一些大小写不敏感的系统中安装这些包就可能有问题,比如在大多数的OSX电脑文件系统中。

并不是所有的url安全字符都是合法的,你可以使用 validate-npm-package-name 包来检测包名中的字符是不是都是合法的。但是,你需要对注册表进行搜索来确定您想要的名称是否已经在使用。

好的包名可以帮助到所有人

我们希望新的包名规则可以帮助包开发者们挑选出合适的名字,并且能够帮助用户去避免意外获取到错误的包。

最后,为你推荐

【第878期】Node, NPM, Yarn 和 package.json

【第557期】搭建前端私有npm杂记

关于本文

译者:@WaterMelon643
译文:http://zcfy.cc/article/the-npm-blog-new-package-moniker-rules
原文:The npm Blog — New Package Moniker rules

0?wx_fmt=jpeg

【图书】你不知道的Javascript(下卷)


推荐阅读
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
author-avatar
手机用户2502852635_269
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有