我整个星期都在尝试着遵循几个指南,将Typescript集成到我的AngularJS1.6.2中。应用程序。每次我都被搞糊涂了。现在,我在名单上的第四个:
- https://angular.io/guide/upgrade
- https://medium.com/@ylerjen/migrating-angularjs-application-to-typescript-5230eb8c46e1的
- https://jenniferwadella.com/blog/using-typescript-angularjs
- https://tech.ovoenergy.com/angular-typescript/的
下面是我的项目的文件结构:
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以捆绑我的应用程序?
非常感谢您的光临。
1条答案
按热度按时间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 ....
中所示