我正在尝试在我的应用程序中使用私有NPM模块,并且需要设置适当的NPM访问令牌,以便第三方工具(Heroku和CI)可以访问并安装模块。
我在~/.bash_profile
中设置了以下行:
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
然后在/path/to/app/.npmrc
我有
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
但是,每当我打开终端时,我在启动时都会收到以下错误:
Error: Failed to replace env in config: ${NPM_TOKEN}
at /Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:429:13
at String.replace (native)
at envReplace (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:424:12)
at parseField (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:400:7)
at /Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:338:17
at Array.forEach (native)
at Conf.add (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:337:23)
at ConfigChain.addString (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/config-chain/index.js:244:8)
at Conf.<anonymous> (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/config/core.js:325:10)
at /Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:76:16
/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/npm.js:29
throw new Error('npm.load() required')
^
Error: npm.load() required
at Object.npm.config.get (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/npm.js:29:11)
at exit (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/utils/error-handler.js:58:40)
at process.errorHandler (/Users/marcthomas/.nvm/versions/node/v4.2.1/lib/node_modules/npm/lib/utils/error-handler.js:385:3)
at emitOne (events.js:77:13)
at process.emit (events.js:169:7)
at process._fatalException (node.js:221:26)
nvm is not compatible with the npm config "prefix" option: currently set to ""
Run `nvm use --delete-prefix v4.2.1 --silent` to unset it.
但是,运行echo $NPM_TOKEN
会返回正确的标记,因此变量肯定存在。
如果我运行source ~/.bash_profile
,则错误消失,我可以正常安装。
任何帮助表示赞赏,因为我在这个问题上猛烈抨击我的头!
答案 0 :(得分:19)
对我的修复是在我export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
.bash_profile
这
export NVM_DIR=~/.nvm
source ~/.nvm/nvm.sh
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
到
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
export NVM_DIR=~/.nvm
source ~/.nvm/nvm.sh
答案 1 :(得分:1)
在您的情况下,您必须执行此操作rm -f ./.npmrc
。这对我有用。
答案 2 :(得分:0)
更新您的CI部署配置:
npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
npm publish
从.npmrc
文件中删除此行:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
我在这里和this question下都看到了答案,建议您完全删除变量设置行或.npmrc
文件。
事实是,.npmrc
文件可能不会被VCS系统忽略,对其进行修改可能会导致意外推送到项目存储库。此外,该文件可能包含其他重要设置。
这里的问题是设置环境变量时.npmrc
不允许使用默认值。例如,如果允许使用以下语法,则该问题将不存在:
//registry.npmjs.org/:_authToken=${NPM_TOKEN:-undefined}
答案 3 :(得分:-1)
从“ ./.npmrc”文件中删除以下行
// registry.npmjs.org /:_ authToken = $ {NPM_TOKEN}