Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点模块名称中使用@符号_Javascript_Node.js_Npm - Fatal编程技术网

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

Javascript 在节点模块名称中使用@符号,javascript,node.js,npm,Javascript,Node.js,Npm,我正在查看一位同事编写的一些代码,她在require语句中使用了@符号。这是其中一个文件的第一行: var restServer = require('@company/config') 当我尝试运行此代码时,我得到一个错误: 错误:找不到模块'@company/config' 坦白地说,我的目录中没有这样的东西需要识别!这里似乎有一些魔力,我讨厌 我所能猜到的是,要么这是一些我从未接触过的晦涩的npm或节点技巧,要么可能是我没有接触到的其他一些黑暗的配置艺术。欢迎提供任何信息,即使只是解释@

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

var restServer = require('@company/config')
当我尝试运行此代码时,我得到一个错误:

错误:找不到模块'@company/config'

坦白地说,我的目录中没有这样的东西需要识别!这里似乎有一些魔力,我讨厌

我所能猜到的是,要么这是一些我从未接触过的晦涩的npm或节点技巧,要么可能是我没有接触到的其他一些黑暗的配置艺术。欢迎提供任何信息,即使只是解释
@
如何与require协同工作

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

更新:99%确定这是npm配置此时的工作方式存在问题,但仍不确定如何着手解决

根据我发现的一些东西更新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.

当您调用
require()
时,它读取一条路由。由于如果将文件夹命名为
@company
,似乎没有问题,因此您应该能够要求具有
@
的文件夹

您的同事可能想为自己保留
@company/config.js
,因为配置通常是个人的,对于其他用户来说不可能相同

require
将调用项目文件夹中的文件,并提供详细信息:

  • 如果调用项目文件夹中的文件,则必须在路由前面添加
    /
  • 如果调用任何全局包,如
    http
    或任何
    npm
    模块(安装在
    节点上的模块
    ),可以忽略
    /
我在测试项目文件夹中创建了一个路由
@company/config
。它只允许我使用
/@company/config
来要求它。只有当我将文件夹移动到
node_modules
中时,它才允许我
require('@company/config')


我不建议在
node\u模块中放置任何模块,它只是
npm
包的“容器”。尝试创建一个新的配置文件并更改require路由,或者简单地删除require并在主文件中创建一个配置对象。

所以我自己解决了这个问题

事实证明,
@company/config
是我们的私有NPM存储库之一,托管在NPM上,并由该别名定义为内部GitHub存储库:它与
require
的工作方式无关


使用
@
可能是也可能不是我不知道的用于私有NPM回购的协议,如果遇到这种情况,请记住。

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

作用域是将相关包分组在一起的一种方式,它还影响npm处理包的方式。每个npm用户/组织都有自己的作用域,只有您可以在自己的作用域中添加包。这意味着你不必担心有人把你的包名放在你前面。因此,它也是向组织发送官方软件包的一种好方法

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

这些文件包括关于要求范围包的附加信息:

需要范围包

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

require('@myorg/mypackage')
节点处理范围文件夹的方式没有什么特别之处,这是 只是指定需要文件夹中的模块mypackage 叫@myorg


除了作用域包之外,npm中的模块别名包可能会导致“@”出现。通过模块别名,您可以使用经常使用的模块,而无需整个路径。当目录结构很长时,它也很有效。e、
require('../../../some/very/deep/module')

相反,您可以使用:
var module=require(“@deep/module”)

在package.json中,您可以提供为其提供别名的模块:

"_moduleAliases": {
  "@root"      : ".", // Application's root
  "@deep"      : "src/some/very/deep/directory/or/file",
  "@my_module" : "lib/some-file.js",
  "something"  : "src/foo", // Or without @. Actually, it could be any string
}
在应用程序的主文件中,使用以下命令:

require('module-alias/register');

有关详细信息,请参阅此处:

范围是表示一组包的通用包所有权

官方文件载于:

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

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

到目前为止,我看到的作用域的主要优点是,每个作用域都由组织/用户的npm帐户控制,这与GitHub用户名/组织名称非常相似

通过这种方式,可以轻松确定您正在查看的包是属于您信任的组织,还是属于第三方工具

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

@angular/cli
然后您知道它来自控制Angular团队的用户/组,可以信任

另一方面,关于以下方面,情况却并非如此:

angular-cli
TODO:WebUI/URL方案真的很不稳定,你如何轻松地链接到相应的组织/用户页面?通过搜索页面源,该URL的唯一点击点位于“collaborators”下,但也包含其他合作者:和


另请参见:

将操作与作用域注册表的作用域相关联。首次登录到私有注册表时非常有用:npm login--scope=@organization--registry=registry.organization.com,这将导致@organization映射到注册表,以便将来安装sp包