在节点模块名称中使用 @ 符号

2022-08-30 02:28:35

我正在查看一位同事编写的一些代码,她在 require 语句中使用了符号。这是其中一个文件的第一行:@

var restServer = require('@company/config')

当我尝试运行此代码时,我收到一个错误:

Error: Cannot find module '@company/config'

坦率地说,我期望,在我的目录中没有任何看起来像这样的东西需要识别!这里似乎有一些魔术在发生,我讨厌。

我所能猜测的是,要么是这是一些我没有接触过的晦涩的npm或Node技巧,要么可能是我没有得到的其他一些黑暗的配置艺术。任何信息都值得赞赏,即使它只是对如何使用需求的解释。@

其他想法:厨师参与了整个事情的某个地方,所以这可能是相关的。

更新:99%确定这是此时的工作方式存在问题,但仍然不确定如何修复它。npm config

更新2基于我发现的一些东西:

Dereks-MacBook-Pro:project-dir derekjanni$ npm config set //registry.npmjs.org/:authtoken $SECRET_TOKEN

Dereks-MacBook-Pro:project-dir derekjanni$ npm install
npm ERR! Darwin 15.0.0
npm ERR! argv "/usr/local/Cellar/node/5.5.0/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v5.5.0
npm ERR! npm  v3.5.3
npm ERR! code E404
npm ERR! 404 Not found : @company/config
npm ERR! 404  '@company/config' is not in the npm registry.

答案 1

npm 中的作用域包前面有一个“@”符号。

作用域允许您创建与其他用户或组织创建的包同名的包,而不会发生冲突。https://docs.npmjs.com/about-scopes

作用域是将相关包组合在一起的一种方式,并且还会影响有关 npm 处理包的方式的一些方面。每个 npm 用户/组织都有自己的作用域,只有你可以在作用域中添加包。这意味着您不必担心有人将您的包裹名称放在您之前。因此,这也是为组织发出官方软件包信号的好方法。https://docs.npmjs.com/misc/scope

这些文档包括有关需要作用域内包的其他信息:https://docs.npmjs.com/misc/scope#requiring-scoped-packages

需要作用域内包

由于作用域包安装在作用域文件夹中,因此在代码中需要作用域时,必须包含作用域的名称,例如

require('@myorg/mypackage')

Node 处理作用域文件夹的方式没有什么特别之处,这只是指定要求在名为 @myorg 的文件夹中使用模块 mypackage。


答案 2

@ 作用域表示一组包的常见包所有权

从官方文件是: https://docs.npmjs.com/about-scopes

注册 npm 用户帐户或创建组织时,将向你授予与您的用户或组织名称匹配的作用域。可以将此作用域用作相关包的命名空间。

作用域允许您创建与其他用户或组织创建的包同名的包,而不会发生冲突。

到目前为止,我看到的范围的主要优点是每个范围都由组织/用户的npm帐户控制,就像GitHub用户名/组织名称一样。

这样,您可以轻松确定您正在查看的包是否属于您信任的组织,或者它是否是第三方工具。

例如,如果您看到一个包:

@angular/cli

然后您知道它来自控制Angular团队的用户/组,并且可以信任。

另一方面,关于:

angular-cli

TODO:网页UI/URL方案实在是刁刁,你怎么容易链接:https://www.npmjs.com/package/@angular/cli 到相应的组织/用户页面,大概 https://www.npmjs.com/~angular?通过搜索页面源,该URL的唯一点击是在“协作者”下,但其中也包含其他协作者:https://www.npmjs.com/~angular-clihttps://www.npmjs.com/~google-wombot

另请参阅:npm 包上“at”(@) 前缀的含义是什么?