一尘不染

在节点模块名称中使用@符号[重复]

javascript

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

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

当我尝试运行此代码时,出现错误:

Error: Cannot find module '@company/config'

坦率地说,我的目录中没有需要识别的东西!我似乎讨厌这里发生的一些魔术。

我只能猜测的是,这是我还没有接触过的一些晦涩的npm或Node技巧,或者也许是我没有得到其他一些黑暗的配置技巧。任何信息都值得赞赏,即使这只是对@require的工作方式的解释。

其他想法:Chef参与了整个事情的某个地方,因此可能是有意义的。

更新 :99%的人确定这是目前工作方式的问题npm config,但仍不确定如何解决。

*基于我发现的一些东西的 *Update2

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.

阅读 377

收藏
2020-05-01

共2个答案

一尘不染

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

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

@对于私有NPM存储库,我可能不知道使用或可能不使用该协议,如果遇到此问题,请记住这一点。

2020-05-01
一尘不染

需要作用域包

由于将范围包安装在范围文件夹中,因此在代码中需要它们时,必须包括范围名称。

require('@myorg/mypackage')

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

2020-05-12