switch between arti and default
This commit is contained in:
192
frontend/README-REGISTRY.md
Normal file
192
frontend/README-REGISTRY.md
Normal file
@@ -0,0 +1,192 @@
|
||||
# NPM Registry Configuration
|
||||
|
||||
This project supports working with two different npm registries:
|
||||
1. **Public registry** - registry.npmjs.org (default)
|
||||
2. **Artifactory** - Your corporate Artifactory npm registry
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Switching Registries Locally
|
||||
|
||||
**On Linux/Mac:**
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Use public npm registry (default)
|
||||
./switch-registry.sh public
|
||||
npm ci --force
|
||||
|
||||
# Use Artifactory registry
|
||||
./switch-registry.sh artifactory
|
||||
# Set auth token if required
|
||||
export ARTIFACTORY_AUTH_TOKEN="your_token_here"
|
||||
npm ci --force
|
||||
```
|
||||
|
||||
**On Windows:**
|
||||
```powershell
|
||||
cd frontend
|
||||
|
||||
# Use public npm registry (default)
|
||||
.\switch-registry.ps1 public
|
||||
npm ci --force
|
||||
|
||||
# Use Artifactory registry
|
||||
.\switch-registry.ps1 artifactory
|
||||
# Set auth token if required
|
||||
$env:ARTIFACTORY_AUTH_TOKEN = "your_token_here"
|
||||
npm ci --force
|
||||
```
|
||||
|
||||
### Building with Docker
|
||||
|
||||
**Using public npm registry (default):**
|
||||
```bash
|
||||
docker compose build app
|
||||
```
|
||||
|
||||
**Using Artifactory registry:**
|
||||
```bash
|
||||
# Without authentication
|
||||
docker compose build app --build-arg NPM_REGISTRY=artifactory
|
||||
|
||||
# With authentication
|
||||
docker compose build app \
|
||||
--build-arg NPM_REGISTRY=artifactory \
|
||||
--build-arg ARTIFACTORY_AUTH_TOKEN="your_token_here"
|
||||
```
|
||||
|
||||
**On Windows PowerShell:**
|
||||
```powershell
|
||||
# With authentication
|
||||
docker compose build app `
|
||||
--build-arg NPM_REGISTRY=artifactory `
|
||||
--build-arg ARTIFACTORY_AUTH_TOKEN="your_token_here"
|
||||
```
|
||||
|
||||
## Configuration Files
|
||||
|
||||
- **`.npmrc.public`** - Configuration for public npm registry
|
||||
- **`.npmrc.artifactory`** - Configuration for Artifactory registry (edit this with your Artifactory URL)
|
||||
- **`.npmrc`** - Active configuration (generated by switch-registry scripts)
|
||||
|
||||
## Setup Artifactory Configuration
|
||||
|
||||
1. Edit `frontend/.npmrc.artifactory` and replace `YOUR_ARTIFACTORY_URL` with your actual Artifactory URL:
|
||||
```
|
||||
registry=https://artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
2. If authentication is required, uncomment the auth lines and use one of these methods:
|
||||
|
||||
**Method 1: Auth Token (Recommended)**
|
||||
```
|
||||
//artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/:_auth=${ARTIFACTORY_AUTH_TOKEN}
|
||||
//artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/:always-auth=true
|
||||
```
|
||||
|
||||
Then set the environment variable:
|
||||
```bash
|
||||
export ARTIFACTORY_AUTH_TOKEN="your_base64_encoded_token"
|
||||
```
|
||||
|
||||
**Method 2: Username/Password**
|
||||
```
|
||||
//artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/:username=${ARTIFACTORY_USERNAME}
|
||||
//artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/:_password=${ARTIFACTORY_PASSWORD}
|
||||
//artifactory.yourcompany.com/artifactory/api/npm/npm-virtual/:email=your-email@company.com
|
||||
```
|
||||
|
||||
## Handling package-lock.json
|
||||
|
||||
The `package-lock.json` file will be different depending on which registry you use. Here are strategies to manage this:
|
||||
|
||||
### Strategy 1: Separate Lockfiles (Recommended)
|
||||
Keep two lockfiles and switch between them:
|
||||
|
||||
```bash
|
||||
# After switching to public and installing
|
||||
npm ci --force
|
||||
cp package-lock.json package-lock.public.json
|
||||
|
||||
# After switching to artifactory and installing
|
||||
npm ci --force
|
||||
cp package-lock.json package-lock.artifactory.json
|
||||
|
||||
# When switching registries in the future
|
||||
cp package-lock.public.json package-lock.json # or
|
||||
cp package-lock.artifactory.json package-lock.json
|
||||
```
|
||||
|
||||
### Strategy 2: Regenerate Lockfile
|
||||
Always regenerate the lockfile after switching:
|
||||
|
||||
```bash
|
||||
./switch-registry.sh artifactory
|
||||
rm package-lock.json
|
||||
npm install
|
||||
```
|
||||
|
||||
### Strategy 3: Git Ignore Lockfile (Not Recommended for Production)
|
||||
If you're frequently switching and don't need deterministic builds:
|
||||
|
||||
Add to `.gitignore`:
|
||||
```
|
||||
frontend/package-lock.json
|
||||
```
|
||||
|
||||
**Warning:** This reduces build reproducibility.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: "npm ci requires package-lock.json"
|
||||
**Solution:** Delete `package-lock.json` and run `npm install` to generate a new one for your current registry.
|
||||
|
||||
### Issue: "404 Not Found - GET https://registry.npmjs.org/..."
|
||||
**Solution:** Your .npmrc is pointing to Artifactory but packages don't exist there.
|
||||
```bash
|
||||
./switch-registry.sh public
|
||||
npm ci --force
|
||||
```
|
||||
|
||||
### Issue: "401 Unauthorized"
|
||||
**Solution:** Check your authentication configuration in `.npmrc.artifactory` and ensure environment variables are set correctly.
|
||||
|
||||
### Issue: "ENOENT: no such file or directory, open '.npmrc.public'"
|
||||
**Solution:** You're missing the registry config files. Make sure both `.npmrc.public` and `.npmrc.artifactory` exist in the frontend directory.
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
For CI/CD pipelines, use environment variables to select the registry:
|
||||
|
||||
**GitHub Actions Example:**
|
||||
```yaml
|
||||
- name: Build with Artifactory
|
||||
env:
|
||||
NPM_REGISTRY: artifactory
|
||||
ARTIFACTORY_AUTH_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }}
|
||||
run: |
|
||||
docker compose build app \
|
||||
--build-arg NPM_REGISTRY=artifactory \
|
||||
--build-arg ARTIFACTORY_AUTH_TOKEN="${ARTIFACTORY_AUTH_TOKEN}"
|
||||
```
|
||||
|
||||
**GitLab CI Example:**
|
||||
```yaml
|
||||
build:
|
||||
script:
|
||||
- docker compose build app
|
||||
--build-arg NPM_REGISTRY=artifactory
|
||||
--build-arg ARTIFACTORY_AUTH_TOKEN="${ARTIFACTORY_AUTH_TOKEN}"
|
||||
variables:
|
||||
NPM_REGISTRY: artifactory
|
||||
ARTIFACTORY_AUTH_TOKEN: ${CI_ARTIFACTORY_TOKEN}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Never commit credentials** - Use environment variables for tokens/passwords
|
||||
2. **Document your Artifactory URL** - Update `.npmrc.artifactory` with your team's URL
|
||||
3. **Keep both config files** - Commit `.npmrc.public` and `.npmrc.artifactory` to git
|
||||
4. **Use the scripts** - Always use `switch-registry.sh/ps1` instead of manually editing `.npmrc`
|
||||
5. **Clean installs** - Use `npm ci --force` after switching to ensure a clean dependency tree
|
||||
Reference in New Issue
Block a user