JavaScript 依赖中为什么有的库名称前面有 @ 符号?

问题描述

为什么 node_modules 里面的依赖库有的是以 @ 开头,有的则不是,这有什么规则吗?

问题出现的环境背景及自己尝试过哪些方法

新建一个 npm 项目,添加一些常用依赖,在 node_modules 文件夹下就可以看到。

相关代码

ls node_modules

你期待的结果是什么?实际看到的错误信息又是什么?

哪位大神来解释一下个中原由。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
阅读 4.7k
3 个回答

@开头的包是使用了 scopes 避免包名冲突,其中这个 scopes 在 npm 中必须要注册有组织(organization)才能发布这种格式的包。比方说 @babel/core 是 Babel 的核心编译器库,它隶属于 babel 这个组织下。

若想自己实践的话,可预先在 npm 注册一个组织,随后在项目中设置 package.json 的 name(报名)、files (需要上传的文件或文件夹)。本地 npm login 后即可使用 npm publish 发布。

现在第三方库主流方案都是通过 monorepo 的方式来管理,近期笔者也在做这方面的工具,可以参考一下:


参考资料

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

出于好奇,特地去了解了一下,回答问题的同时顺便自己被科普了一下。

JavaScript 依赖中为什么有的库名称前面有 @ 符号?

@ 符号在 JavaScript 依赖中表示一个命名空间,它可以用来区分不同的包或者组织。比如,@angular/core 是 Angular 框架的核心模块,@babel/core 是 Babel 编译器的核心模块。使用 @ 符号可以避免包名冲突或者提高可读性

详细点的解释就是楼上已经给出链接,说一下我个人理解:

比如:
1.题主创建了一个堪比react的框架,叫做kuangjia,然后想要在npm上发布;
2.找到npmjs创建账号...[此处省略n个字眼],包名叫做kuangjia001;
3.npm会给你一个@+kuangjia001组合后的名字,即@kuangjia001;
4.react下面有个子包叫shared,然而巧合的是你的@kuangjia001下面也有一个叫shared的子包,怎么区分?通过@react/shared和@kuangjia001来区分!~
5.和域名一样一样的~😏

希望对你有所帮助~

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题