问题描述
为什么 node_modules
里面的依赖库有的是以 @
开头,有的则不是,这有什么规则吗?
问题出现的环境背景及自己尝试过哪些方法
新建一个 npm 项目,添加一些常用依赖,在 node_modules
文件夹下就可以看到。
相关代码
ls node_modules
你期待的结果是什么?实际看到的错误信息又是什么?
哪位大神来解释一下个中原由。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
为什么 node_modules
里面的依赖库有的是以 @
开头,有的则不是,这有什么规则吗?
新建一个 npm 项目,添加一些常用依赖,在 node_modules
文件夹下就可以看到。
ls node_modules
哪位大神来解释一下个中原由。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
@
开头的包是使用了 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 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
所有权 https://docs.npmjs.com/about-scopes