340 lines
6.0 KiB
Markdown
340 lines
6.0 KiB
Markdown
# NPM Registry - Usage Examples
|
|
|
|
## Quick Reference
|
|
|
|
### Use Public NPM (Default)
|
|
```bash
|
|
# Linux/Mac
|
|
./quickstart.sh
|
|
|
|
# Windows
|
|
.\quickstart.ps1
|
|
```
|
|
|
|
### Use Artifactory
|
|
```bash
|
|
# Linux/Mac
|
|
export ARTIFACTORY_AUTH_TOKEN="your_token_here"
|
|
./quickstart.sh -bsf
|
|
|
|
# Windows
|
|
$env:ARTIFACTORY_AUTH_TOKEN = "your_token_here"
|
|
.\quickstart.ps1 -Bsf
|
|
```
|
|
|
|
### Rebuild with Artifactory
|
|
```bash
|
|
# Linux/Mac
|
|
export ARTIFACTORY_AUTH_TOKEN="your_token_here"
|
|
./quickstart.sh --rebuild -bsf
|
|
|
|
# Windows
|
|
$env:ARTIFACTORY_AUTH_TOKEN = "your_token_here"
|
|
.\quickstart.ps1 -Rebuild -Bsf
|
|
```
|
|
|
|
## Local Development (Without Docker)
|
|
|
|
### Switch Registry for Local Development
|
|
|
|
**Linux/Mac:**
|
|
```bash
|
|
cd frontend
|
|
|
|
# Switch to public npm
|
|
./switch-registry.sh public
|
|
npm ci --force
|
|
npm start
|
|
|
|
# Switch to Artifactory
|
|
./switch-registry.sh artifactory
|
|
export ARTIFACTORY_AUTH_TOKEN="your_token"
|
|
npm ci --force
|
|
npm start
|
|
```
|
|
|
|
**Windows:**
|
|
```powershell
|
|
cd frontend
|
|
|
|
# Switch to public npm
|
|
.\switch-registry.ps1 public
|
|
npm ci --force
|
|
npm start
|
|
|
|
# Switch to Artifactory
|
|
.\switch-registry.ps1 artifactory
|
|
$env:ARTIFACTORY_AUTH_TOKEN = "your_token"
|
|
npm ci --force
|
|
npm start
|
|
```
|
|
|
|
**Using NPM Scripts (Cross-platform):**
|
|
```bash
|
|
cd frontend
|
|
|
|
# Switch to public npm
|
|
npm run registry:public
|
|
npm ci --force
|
|
npm start
|
|
|
|
# Switch to Artifactory
|
|
npm run registry:artifactory
|
|
npm ci --force
|
|
npm start
|
|
```
|
|
|
|
## Docker Build Examples
|
|
|
|
### Build Specific Service with Registry
|
|
|
|
**Public NPM:**
|
|
```bash
|
|
docker compose build app
|
|
```
|
|
|
|
**Artifactory:**
|
|
```bash
|
|
# Without auth
|
|
docker compose build app --build-arg NPM_REGISTRY=artifactory
|
|
|
|
# With auth
|
|
docker compose build app \
|
|
--build-arg NPM_REGISTRY=artifactory \
|
|
--build-arg ARTIFACTORY_AUTH_TOKEN="your_token"
|
|
```
|
|
|
|
**Windows PowerShell:**
|
|
```powershell
|
|
docker compose build app `
|
|
--build-arg NPM_REGISTRY=artifactory `
|
|
--build-arg ARTIFACTORY_AUTH_TOKEN="your_token"
|
|
```
|
|
|
|
## Common Workflows
|
|
|
|
### Corporate Network Development
|
|
When working from a corporate network that requires Artifactory:
|
|
|
|
1. **First time setup:**
|
|
```bash
|
|
# Edit .npmrc.artifactory with your Artifactory URL
|
|
nano frontend/.npmrc.artifactory
|
|
|
|
# Set auth token (get from your Artifactory admin)
|
|
export ARTIFACTORY_AUTH_TOKEN="your_base64_token"
|
|
|
|
# Start with Artifactory
|
|
./quickstart.sh -bsf
|
|
```
|
|
|
|
2. **Daily development:**
|
|
```bash
|
|
export ARTIFACTORY_AUTH_TOKEN="your_token"
|
|
./quickstart.sh -bsf
|
|
```
|
|
|
|
### Home/Public Network Development
|
|
When working from home or a network with npm access:
|
|
|
|
```bash
|
|
# Just run without -bsf flag
|
|
./quickstart.sh
|
|
```
|
|
|
|
### Switching Between Environments
|
|
|
|
**Moving from Corporate to Home:**
|
|
```bash
|
|
# Stop existing containers
|
|
docker compose down
|
|
|
|
# Rebuild with public npm
|
|
./quickstart.sh --rebuild
|
|
```
|
|
|
|
**Moving from Home to Corporate:**
|
|
```bash
|
|
# Stop existing containers
|
|
docker compose down
|
|
|
|
# Rebuild with Artifactory
|
|
export ARTIFACTORY_AUTH_TOKEN="your_token"
|
|
./quickstart.sh --rebuild -bsf
|
|
```
|
|
|
|
## Handling Multiple package-lock.json Files
|
|
|
|
### Save lockfiles for both registries:
|
|
|
|
```bash
|
|
cd frontend
|
|
|
|
# Generate public lockfile
|
|
./switch-registry.sh public
|
|
rm package-lock.json
|
|
npm install
|
|
cp package-lock.json package-lock.public.json
|
|
|
|
# Generate artifactory lockfile
|
|
./switch-registry.sh artifactory
|
|
rm package-lock.json
|
|
npm install
|
|
cp package-lock.json package-lock.artifactory.json
|
|
|
|
# Add to git
|
|
git add package-lock.public.json package-lock.artifactory.json
|
|
```
|
|
|
|
### Use the appropriate lockfile:
|
|
|
|
```bash
|
|
# When using public npm
|
|
cp package-lock.public.json package-lock.json
|
|
npm ci
|
|
|
|
# When using Artifactory
|
|
cp package-lock.artifactory.json package-lock.json
|
|
npm ci
|
|
```
|
|
|
|
## CI/CD Examples
|
|
|
|
### GitHub Actions
|
|
|
|
**.github/workflows/build.yml**
|
|
```yaml
|
|
name: Build
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build-public:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Build with public npm
|
|
run: |
|
|
docker compose build app
|
|
docker compose up -d
|
|
|
|
build-artifactory:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Build with Artifactory
|
|
env:
|
|
ARTIFACTORY_AUTH_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }}
|
|
run: |
|
|
./quickstart.sh -bsf
|
|
```
|
|
|
|
### GitLab CI
|
|
|
|
**.gitlab-ci.yml**
|
|
```yaml
|
|
variables:
|
|
NPM_REGISTRY: "public"
|
|
|
|
build:public:
|
|
stage: build
|
|
script:
|
|
- docker compose build app
|
|
- docker compose up -d
|
|
only:
|
|
- main
|
|
|
|
build:artifactory:
|
|
stage: build
|
|
variables:
|
|
NPM_REGISTRY: "artifactory"
|
|
script:
|
|
- export ARTIFACTORY_AUTH_TOKEN="${CI_ARTIFACTORY_TOKEN}"
|
|
- ./quickstart.sh -bsf
|
|
only:
|
|
- develop
|
|
```
|
|
|
|
### Jenkins Pipeline
|
|
|
|
**Jenkinsfile**
|
|
```groovy
|
|
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
ARTIFACTORY_AUTH_TOKEN = credentials('artifactory-npm-token')
|
|
}
|
|
|
|
stages {
|
|
stage('Build with Artifactory') {
|
|
steps {
|
|
sh './quickstart.sh -bsf'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Build fails with "Cannot find .npmrc.public"
|
|
|
|
**Problem:** Registry config files are missing.
|
|
|
|
**Solution:**
|
|
```bash
|
|
cd frontend
|
|
# Verify files exist
|
|
ls -la .npmrc.*
|
|
|
|
# If missing, they should be committed to git
|
|
git status
|
|
```
|
|
|
|
### "ENOENT: no such file or directory, open '/frontend/dist/frontend/browser'"
|
|
|
|
**Problem:** Frontend build failed due to registry issues.
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check build logs
|
|
docker compose logs app | grep npm
|
|
|
|
# Try rebuilding with verbose logging
|
|
docker compose build app --no-cache --progress=plain
|
|
```
|
|
|
|
### npm ci fails with 404 errors
|
|
|
|
**Problem:** Wrong registry is configured.
|
|
|
|
**Solution:**
|
|
```bash
|
|
cd frontend
|
|
cat .npmrc # Check which registry is active
|
|
|
|
# If using wrong one, switch:
|
|
npm run registry:public # or registry:artifactory
|
|
npm ci --force
|
|
```
|
|
|
|
### Authentication fails with Artifactory
|
|
|
|
**Problem:** Token is invalid or not set.
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check token is set
|
|
echo $ARTIFACTORY_AUTH_TOKEN # Linux/Mac
|
|
echo $env:ARTIFACTORY_AUTH_TOKEN # Windows
|
|
|
|
# Get new token from Artifactory UI:
|
|
# Artifactory -> User Profile -> Generate Token
|
|
|
|
# Set the token
|
|
export ARTIFACTORY_AUTH_TOKEN="your_new_token"
|
|
```
|