我正在看一位同事写的一些代码,她@在require语句中使用该符号。这是这些文件之一的第一行:
@
var restServer = require('@company/config')
当我尝试运行此代码时,出现错误:
Error: Cannot find module '@company/config'
坦率地说,我的目录中没有需要识别的东西!我似乎讨厌这里发生的一些魔术。
我只能猜测的是,这是我还没有接触过的一些晦涩的npm或Node技巧,或者也许是我没有得到其他一些黑暗的配置技巧。任何信息都值得赞赏,即使这只是对@require的工作方式的解释。
其他想法:Chef参与了整个事情的某个地方,因此可能是有意义的。
更新 :99%的人确定这是目前工作方式的问题npm config,但仍不确定如何解决。
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.
所以我自己解决了这个问题。
事实证明@company/config,这是我们的私有NPM存储库之一,托管在npm上,并由此别名定义为内部GitHub存储库:与require工作方式无关。
@company/config
require
@对于私有NPM存储库,我可能不知道使用或可能不使用该协议,如果遇到此问题,请记住这一点。
需要作用域包
由于将范围包安装在范围文件夹中,因此在代码中需要它们时,必须包括范围名称。
require('@myorg/mypackage')
Node处理范围文件夹的方式没有什么特别的,这只是指定要求在名为@myorg的文件夹中使用模块mypackage。