我如何理解所有这些将AngularJS 1.x迁移到Typescript的指南?

2sbarzqh  于 2023-08-02  发布在  Angular
关注(0)|答案(1)|浏览(130)

我整个星期都在尝试着遵循几个指南,将Typescript集成到我的AngularJS1.6.2中。应用程序。每次我都被搞糊涂了。现在,我在名单上的第四个:

下面是我的项目的文件结构:

ProjectRoot
--> app
----> js
------> controllers
------> directives
------> services
------> modules
------> app.js
------> main.js
------> routes.js
----> templates
----> index.html
--> gruntFile.js
--> package.json

字符串
结构比这要复杂得多,但这些是我认为最相关的文件夹和文件。
根据上面的第四个指南,我将以下文件添加到我的项目中:
ProjectRoot/app.ts

import { BaselineService } from './app/js/services/baselineService'
import { BaselineController } from './app/js/controllers/baselineController'
import angular from 'angular';

angular
  .module('app',[])
  .controller('ctrl', BaselineController)
  .service('service', BaselineService);


ProjectRoot/app/js/services/baselineService.ts

export class BaselineService {
    static $inject = ['$http'];

    constructor(private $http) {

    }

    get() {
        return this.$http.get('url');
    }
}


ProjectRoot/app/js/controllers/baselineController.ts

import angular from 'angular';
import { BaselineService } from '../services/baselineService';

export class BaselineController {
    prop: string;
    static $inject = ['service'];

    constructor (baselineService: BaselineService) {
        this.prop = baselineService.get();
    }
}

angular.module('app').controller('BaselineController', BaselineController);


ProjectRoot/gruntFile.js

module.exports = function (grunt) {
...
    grunt.initConfig({
        ...
        ts: {
            default: {
                src: ['_all.ts'],
                out: 'src/out.js',
                options: {
                    sourceMap: true
                }
            }
        }
    });
}


ProjectRoot/package.json

{
    ...
    "dependencies": {
        ...
        "browserify": "^17.0.0",
        ...
    }
    ...
}


有几点我搞不清楚。我在这里提到两个:
1.该指南提到了它依赖的一个文件:

/// <reference path='typings/Angularjs/angular.d.ts' />

/// <reference path="typings/Angularjs/angular-route.d.ts" />

/// <reference path='typings/moment/moment.d.ts' />

/// <reference path='app.ts' />

/// <reference path='controller.ts' />

/// <reference path='service' />


它说:
此文件跟踪项目中的所有文件,在编译时,它们被编译成es 5,并连接成一个文件,并包含源Map。
但是它没有提到如何调用这个文件,或者扩展名是什么,或者它应该驻留在哪里。
1.该指南还提到:
我们需要结合使用tsify和browserify来首先编译typescript,然后抓取我们用导入布局的依赖链。然后,我们可以使用一个简单的命令捆绑我们的应用程序:

browserify app.ts -p tsify --debug > bundle.js


它没有详细说明如何做到这一点(就像是把它留给另一篇文章一样),当我在PowerShell中执行ProjectRoot下的命令时,它告诉我The term 'browserify' is not recognized as the name of a cmdlet, function, script file, or operable program.(甚至在I npm i browserify之后)。
首先,我请求(非常感谢)帮助克服上述障碍。有人知道在哪里保存1)中提到的文件以及如何称呼它吗?有没有人知道如何安装和运行browserify以捆绑我的应用程序?
非常感谢您的光临。

bvjxkvbb

bvjxkvbb1#

除了官方文档外,大多数这些指南都已经过时了。如果您在教程或指南中看到Grunt或Browserify,则可能已经过时。你有两个问题从Angular 1升级到Angular(无论您选择哪个版本),并转换为TypeScript。
对于设置和配置,您可以考虑只使用official CLI来生成项目,并将样板文件替换为您的代码。这将为您提供TypeScript支持。将所有文件从js重命名为ts将导致大量编译器错误,但这是一个起点。
至于将实际的Angular 1代码升级到Angular 16(或任何版本),您可能需要寻找每个主要版本的指南,交叉检查变更日志in the repo,并进行大量调试;你已经过时好几年了,所以需要工作。也有codemods to help you out,但我没有测试过,不能保证他们。
至于你的问题中的细节,these are those "reference path" directives,根本不需要使用Browserify(使用CLI生成配置,包括构建步骤),并且无法找到browserify,可能是因为指南假设您全局安装了(要运行项目npm依赖项与可执行文件,请预先添加npx,如npx browserify ....中所示

相关问题