Building
Building Guide
Section titled “Building Guide”This guide covers how to build and package Feima Copilot for distribution.
Build Overview
Section titled “Build Overview”Feima Copilot uses esbuild for fast compilation:
- TypeScript → JavaScript
- Source maps included
- Minified for production
- VSIX packaging for Marketplace
Build Commands
Section titled “Build Commands”Development Build
Section titled “Development Build”# Compile with source mapsnpm run compileWatch Mode
Section titled “Watch Mode”# Watch for changes and rebuildnpm run watchProduction Build
Section titled “Production Build”# Clean and build for productionnpm run buildClean Build Artifacts
Section titled “Clean Build Artifacts”# Remove dist/ and docs-dist/npm run cleanBuild Configuration
Section titled “Build Configuration”The build configuration is in .esbuild.ts:
import { build } from 'esbuild';
const options = { entryPoints: ['src/extension.ts'], bundle: true, outfile: 'dist/extension.js', external: ['vscode'], format: 'cjs', platform: 'node', sourcemap: true, minify: process.env.NODE_ENV === 'production'};
build(options);Packaging
Section titled “Packaging”Create VSIX Package
Section titled “Create VSIX Package”# Create .vsix filenpm run packageThis creates feima-copilot-llms-extension.vsix in the project root.
Package with Specific Version
Section titled “Package with Specific Version”# Update version in package.json firstnpm version patch # or minor, major
# Then packagenpm run packageRelease Process
Section titled “Release Process”1. Update Version
Section titled “1. Update Version”# Update package.json versionnpm version <patch|minor|major>
# Examples:npm version patch # 0.1.0 → 0.1.1npm version minor # 0.1.0 → 0.2.0npm version major # 0.1.0 → 1.0.02. Update Changelog
Section titled “2. Update Changelog”Edit CHANGELOG.md:
## [0.1.1] - 2024-02-23
### Added- New feature description
### Fixed- Bug fix description
### Changed- Change description3. Run Tests
Section titled “3. Run Tests”# Run all testsnpm test
# Check coveragenpm run test:coverage4. Build and Package
Section titled “4. Build and Package”# Clean buildnpm run clean
# Production buildnpm run build
# Create packagenpm run package5. Verify Package
Section titled “5. Verify Package”# List contents of VSIXunzip -l feima-copilot-llms-extension.vsix
# Or inspect with vscevsce ls feima-copilot-llms-extension.vsix6. Publish to Marketplace
Section titled “6. Publish to Marketplace”# Publish to VS Code Marketplacevsce publish
# Or publish specific versionvsce publish 0.1.1Pre-publishing Checklist
Section titled “Pre-publishing Checklist”Before publishing, verify:
- Version updated in
package.json - Changelog updated
- All tests pass
- No linting errors
- Build successful
- VSIX package verified
- README updated if needed
- Documentation updated if needed
- Release notes prepared
Manual Installation for Testing
Section titled “Manual Installation for Testing”Install from VSIX
Section titled “Install from VSIX”# Install from command linecode --install-extension feima-copilot-llms-extension.vsix
# Or via VS Code:# 1. Extensions → ... (menu)# 2. Install from VSIX...# 3. Select the .vsix fileUninstall
Section titled “Uninstall”# Uninstall from command linecode --uninstall-extension feima-copilot-llms-extension
# Or via VS Code:# 1. Extensions → Find Feima Copilot# 2. Click gear icon → UninstallMulti-Market Publishing
Section titled “Multi-Market Publishing”Feima Copilot is published as two extensions:
China Market (Open VSX)
Section titled “China Market (Open VSX)”# Publish to Open VSX (for VSCodium users in China)ovsx publishGlobal Market (VS Code Marketplace)
Section titled “Global Market (VS Code Marketplace)”# Publish to VS Code Marketplacevsce publishAutomated Builds
Section titled “Automated Builds”The project uses GitHub Actions for automated builds:
Build Workflow
Section titled “Build Workflow”name: Build
on: [push, pull_request]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm run build - run: npm test - run: npm run package - uses: actions/upload-artifact@v3 with: name: extension-vsix path: '*.vsix'Release Workflow
Section titled “Release Workflow”name: Release
on: push: tags: - 'v*'
jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm run build - run: npm run package - name: Publish to Marketplace run: vsce publish env: VSCE_PAT: ${{ secrets.VSCE_PAT }}Secrets Required
Section titled “Secrets Required”For automated publishing, configure these secrets:
| Secret | Purpose |
|---|---|
VSCE_PAT | VS Code Marketplace personal access token |
OVSX_PAT | Open VSX personal access token |
Troubleshooting
Section titled “Troubleshooting”Build Fails
Section titled “Build Fails”Problem: esbuild fails to compile
Solution:
# Clean and retrynpm run cleannpm installnpm run buildVSIX Validation Errors
Section titled “VSIX Validation Errors”Problem: VSIX fails validation
Solution:
# Check package.jsoncat package.json
# Verify publisher# Verify version# Verify icon size (128x128 pixels)Publish Fails
Section titled “Publish Fails”Problem: vsce publish fails
Solution:
# Check if token is validvsce ls-publishers
# Try with verbose outputvsce publish --no-dry-runIcon Issues
Section titled “Icon Issues”Problem: Icon not displaying correctly
Solution:
- Verify icon is exactly 128x128 pixels
- Verify icon is in PNG format
- Verify icon path in
package.jsonis correct
Build Artifacts
Section titled “Build Artifacts”Contains compiled extension:
dist/├── extension.js # Compiled code├── extension.js.map # Source map└── [other compiled files]docs-dist/
Section titled “docs-dist/”Contains built documentation:
docs-dist/├── index.html├── guides/├── reference/└── dev/The VSIX package containing everything needed for installation.
Performance Optimization
Section titled “Performance Optimization”Build Time Optimization
Section titled “Build Time Optimization”# Use cachenpm install --prefer-offline
# Parallel builds (if needed)npm run build:parallelBundle Size Optimization
Section titled “Bundle Size Optimization”- Externalize
vscodemodule (already done) - Use tree-shaking (esbuild default)
- Minify in production builds
Continuous Integration
Section titled “Continuous Integration”Builds run on:
- Every push to main
- Every pull request
- Every tag push (for releases)
View build status at:
- GitHub Actions tab in repository
Resources
Section titled “Resources”Next Steps
Section titled “Next Steps”- Development Setup - Set up development environment
- Testing Guide - Write tests
- Documentation - Project documentation