None of the other answers were working for me. After hours of hair pulling, we finally figured it out. The solution that worked is almost the same as the other answers but with a very minor tweak.
- Set an NPM_TOKEN environment variable on Elastic Beanstalk under
Configuration
> Software Configuration
> Environment Properties
.
- Create a
.ebextensions/npm.config
file. (The name does not have to be 'npm'.)
Put this content into the file:
files:
"/tmp/.npmrc":
content: |
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Note that it uses ${NPM_TOKEN}
and not $NPM_TOKEN
. This is vital. Using $NPM_TOKEN
will not work; it must have the curly braces: ${NPM_TOKEN}
.
Why are the curly braces needed? No idea. In shell/POSIX languages, ${VAR}
and $VAR
are synonymous. However, in .npmrc
files (at the time of this writing), variables without the curly brackets are not recognized as variables, so npm must be using a slightly different syntax standard.
UPDATE
Also, this has worked for us only on new or cloned environments. For whatever reason, environments which were not initialized with a /tmp/.npmrc
will not read it in any future deployments before running npm install --production
. We've tried countless methods on 4 different apps, but cloning and replacing an environment has been the only method which has worked.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…