Angular如何构建和运行
只是想了解Angular是如何在幕后构建和运行的 以下是我迄今为止所了解的情况。我想知道我是否错过了什么 角度如何构建 在使用TypeScript编写Angular应用程序之后,我们使用Angular CLI命令来构建应用程序Angular如何构建和运行,angular,typescript,build,angular-cli,Angular,Typescript,Build,Angular Cli,只是想了解Angular是如何在幕后构建和运行的 以下是我迄今为止所了解的情况。我想知道我是否错过了什么 角度如何构建 在使用TypeScript编写Angular应用程序之后,我们使用Angular CLI命令来构建应用程序 ng build命令将应用程序编译到输出目录中,生成工件将存储在dist/目录中 内部流程 1。Angular CLI运行Webpack来构建和绑定所有JavaScript和CSS代码 2.反过来,Webpack调用TypeScript加载程序,该加载程序获取Angula
ng build
命令将应用程序编译到输出目录中,生成工件将存储在dist/
目录中
内部流程
1。Angular CLI运行Webpack来构建和绑定所有JavaScript和CSS代码
2.反过来,Webpack调用TypeScript加载程序,该加载程序获取Angular项目中的所有.ts
文件,然后将它们传输到JavaScript,即浏览器可以理解的.js
文件
post说Angular有两个编译器:
- 视图编译器
- 模块编译器
dist/
目录中的网页包
角度如何运行
构建完成后,我们应用程序的所有组件、服务、模块等都会传输到JavaScript.js
文件中,用于在浏览器中运行Angular应用程序
声明
AppComponent
类(在main.ts中)引导时,Angular在index.html
中查找
,找到它,实例化AppComponent的实例,并将其呈现在
标记中main.ts
来解释引导过程,但Angular应用程序不是使用JavaScript.js
文件引导或启动的吗
不是所有上述语句都是在运行时使用JavaScript.js
文件完成的吗
有人知道所有零件是如何在深度上结合在一起的吗?角度是如何形成的?
Angular CLI
调用Webpack
,当Webpack
点击.ts
文件时,它将其传递给TypeScript
编译器,该编译器有一个输出转换器,用于编译Angular
模板
所以构建顺序是:
Angular CLI
=>Webpack
=>TypeScript
Compiler=>TypeScript
编译器在编译时调用Angular
编译器
角度如何运行?
Angular
使用Javascript
文件引导和运行
实际上,引导过程是运行时的,在打开浏览器之前发生。这就引出了我们的下一个问题
所以,如果引导过程发生在Javascript
文件中,那么为什么Angular
文档使用main.ts
TypeScript文件来解释引导过程呢
Angular
文档只讨论.ts
文件,因为这是源文件
这是一个简短的回答。如果有人能深入回答,我将不胜感激
感谢@在聊天中回答我的问题。(当我说Angular时,我指的是Angular 2+,如果我提到Angular 1,我会明确地说Angular js)
序曲:令人困惑
Angular,可能更准确地说,Angular cli已经将构建过程中涉及的许多Javascript趋势分析工具合并在一起。这确实会引起一点混乱
为了进一步混淆,angular js中经常使用术语compile
,指的是获取模板的伪html并将其转换为DOM元素的过程。这是编译器工作的一部分,只是其中一个较小的部分
首先,不需要使用TypeScript、angular cli或Webpack来运行angular。回答你的问题。我们应该看一个简单的问题:“什么是角度?”
角:它是做什么的?
这一部分可能会引起争议,我们将拭目以待其核心是Angular提供的服务,它是一种依赖注入机制,可以跨Javascript、HTML和CSS工作。您单独编写所有的小片段,并在每个小片段中遵循Angular引用其他片段的规则。然后以某种方式将其编织起来
更具体地说:
- 模板允许将HTML连接到Javascript组件中。这允许用户对DOM本身的输入(例如单击按钮)输入到Javascript组件中,还允许Javascript组件中的变量控制DOM中的结构和值
- Javascript类(包括Javascript组件)需要能够访问它们所依赖的其他Javascript类的实例(例如,经典依赖项注入)。BookListComponent需要BookListService的实例,而BookListService可能需要BookListPolicy或类似的实例。这些类中的每个类都有不同的生存期(例如,服务通常是单例的,组件通常不是单例的),Angular必须管理所有这些生存期、组件的创建以及依赖项的连接
- CSS规则需要以这样的方式加载,即它们只应用于DOM的一个子集(组件的样式是该组件的本地样式)
import
关键字)。这是由Webpack负责的
编译器做什么?
现在你知道我们可以谈什么了
Object(__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__["a" /* platformBrowserDynamic */])().bootstrapModule(__WEBPACK_IMPORTED_MODULE_2__app_app_module__["a" /* AppModule */])
.catch(function (err) { return console.log(err); });
"scripts": {
"serve": "webpack-dev-server --inline ",
"build": "webpack --progress"
}
module.exports = {
devtool: 'source-map',
entry: './src/main.ts',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.ts$/,
loaders: ['awesome-typescript-loader', 'angular2-template-loader'],
exclude: [/\.(spec|e2e)\.ts$/]
},
/* Embed files. */
{
test: /\.(html|css)$/,
loader: 'raw-loader',
exclude: /\.async\.(html|css)$/
},
/* Async loading. */
{
test: /\.async\.(html|css)$/,
loaders: ['file?name=[name].[hash].[ext]', 'extract']
},
]
},
resolve: {
extensions: ['.ts', '.js']
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
}
resolve: {
extensions: ['.ts', '.js']
}
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
devtool: 'source-map',
loader: 'raw-loader'