Analog

从Angular迁移到Analog

On this page

从 Angular 迁移到 Analog

一个现有的 Angular 单页应用可以通过一个 Angular CLI 或者 Nx 工作区的原理器/生成器配置成使用 Analog。

Analog 兼容 Angular v17 及以上版本.

使用原理器/生成器

首先,安装 @analogjs/platform 软件包:

npm install @analogjs/platform --save-dev

下一步,执行一下命令来配置 Vite,更新项目配置的构建/伺服的目标,移动必须的文件并且设置 Vitest 进行单元测试(可选)

npx ng generate @analogjs/platform:migrate --project [your-project-name]

Nx 项目:

npx nx generate @analogjs/platform:migrate --project [your-project-name]

更新全局样式和脚本

如果在你的 angular.json 里有全局的脚本或者样式文件,把他们移动到 index.html 里的 head 里。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>My Analog app</title>
    <base href="/" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="stylesheet" href="/src/styles.css" />
  </head>
  <body>
    <app-root></app-root>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

设置环境

在 Angular 应用程序中,fileReplacements 是在 angular.json 中针对不同环境进行配置的。

使用环境变量

在 Analog 中,你可以设置并使用环境变量。这是推荐的方法。

在应用程序的根目录添加一个 .env 文件,并为任何公共环境变量加上 VITE_ 前缀。不要将此文件提交到你的源代码仓库中。

VITE_MY_API_KEY=development-key

# 仅在服务器构建中可用
MY_SERVER_API_KEY=development-server-key

在你的代码中导入并使用环境变量。

@Injectable({
  providedIn: 'root',
})
export class AuthService {
  private readonly apiKey = import.meta.env['VITE_MY_API_KEY'];

  constructor(private http: HttpClient) {}
}

部署时,将环境变量设置为生产环境对应的值。

VITE_MY_API_KEY=production-key

# 仅在服务器构建中可用
MY_SERVER_API_KEY=production-server-key

阅读这里了解更多关于环境变量的信息。

使用文件替换

你也可以使用 fileReplacements 选项来替换文件。

/// <reference types="vitest" />
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
  build: {
    target: ['es2020'],
  },
  resolve: {
    mainFields: ['module'],
  },
  plugins: [
    analog({
      fileReplacements:
        mode === 'production'
          ? [
              {
                replace: 'src/environments/environment.ts',
                with: 'src/environments/environment.prod.ts',
              },
            ]
          : [],
    }),
  ],
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: ['src/test-setup.ts'],
    include: ['**/*.spec.ts'],
    reporters: ['default'],
  },
  define: {
    'import.meta.vitest': mode !== 'production',
  },
}));

复制资产

默认情况下,public 目录中的静态资产会复制到构建输出目录。如果要复制该目录之外的其他资产,请使用 nxCopyAssetsPlugin Vite 插件。

导入插件并进行设置:

/// <reference types="vitest" />
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
  // ...
  plugins: [analog(), nxCopyAssetsPlugin(['*.md'])],
}));

启用 HMR

Angular 支持 HMR/Live reload,在大多数情况下,无需重新加载页面即可更新组件。要在 Analog 中启用它,请使用 liveReload: true 选项。

/// <reference types="vitest" />
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
  // .. 其他配置
  plugins: [
    analog({
      liveReload: true,
    }),
  ],
}));