Mos*_*ham 573 javascript angular
我想为Angular开始一个简单的hello world应用程序.
当我按照官方快速入门中的说明进行操作时,安装程序在我的项目中创建了32,000个文件.
我认为这是一些错误或者我错过了什么,所以我决定使用angular-cli,但在设置项目后我计算了41,000个文件.
我哪里做错了?我错过了一些非常明显的东西吗?
Bhu*_*kar 351
您的配置没有任何问题.
Angular(从2.0版开始)使用npm模块和依赖项进行开发.这是你看到如此大量文件的唯一原因.
Angular的基本设置包含转换器,类型依赖关系,它们仅对于开发目的是必不可少的.
完成开发后,您需要做的就是捆绑此应用程序.
捆绑应用程序后,只有一个bundle.js
文件可以在服务器上部署.
'transpiler'只是一个编译器,感谢@omninonsense添加它.
Ank*_*ngh 140
Typical Angular2 Project
Run Code Online (Sandbox Code Playgroud)
NPM包 文件(开发) 真实世界文件(部署)
@angular 3,236 1
rxJS 1,349 1*
core-js 1,341 2
typings 1,488 0
gulp 1,218 0
gulp-typescript 1,243 0
lite-server 5,654 0
systemjs-builder 6,470 0
__________________________________________________________________
Total 21,999 3
Run Code Online (Sandbox Code Playgroud)
*
: bundled with @angular
[ 看捆绑过程this ]
hur*_*ane 50
您的开发配置没有任何问题.
出错了生产配置.
当您开发"Angular 2 Project"或"任何基于JS的项目"时,您可以使用所有文件,您可以尝试所有文件,您可以导入所有文件.但是如果你想要服务这个项目,你需要组合所有结构化文件并摆脱无用的文件.
将这些文件组合在一起有很多选项:
swa*_*ter 30
正如几位人士已经提到的:node_modules目录中的所有文件(包的NPM位置)都是项目依赖项的一部分(所谓的直接依赖项).除此之外,您的依赖项还可以拥有自己的依赖项等等(所谓的传递依赖项).几万个文件没什么特别的.
因为你只能上传10'000个文件(见评论),所以我会选择捆绑引擎.该引擎将捆绑您的所有JavaScript,CSS,HTML等,并创建一个捆绑包(如果您指定它们,则创建更多捆绑包).您的index.html将加载此捆绑包,就是这样.
我是webpack的粉丝,所以我的webpack解决方案将创建一个应用程序包和一个供应商包(对于完整的工作应用程序,请参见https://github.com/swaechter/project-collection/tree/master/web-angular2-例子):
的index.html
<!DOCTYPE html>
<html>
<head>
<base href="/">
<title>Webcms</title>
</head>
<body>
<webcms-application>Applikation wird geladen, bitte warten...</webcms-application>
<script type="text/javascript" src="vendor.bundle.js"></script>
<script type="text/javascript" src="main.bundle.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
var webpack = require("webpack");
var path = require('path');
var ProvidePlugin = require('webpack/lib/ProvidePlugin');
var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
/*
* Configuration
*/
module.exports = {
devtool: 'source-map',
debug: true,
entry: {
'main': './app/main.ts'
},
// Bundle configuration
output: {
path: root('dist'),
filename: '[name].bundle.js',
sourceMapFilename: '[name].map',
chunkFilename: '[id].chunk.js'
},
// Include configuration
resolve: {
extensions: ['', '.ts', '.js', '.css', '.html']
},
// Module configuration
module: {
preLoaders: [
// Lint all TypeScript files
{test: /\.ts$/, loader: 'tslint-loader'}
],
loaders: [
// Include all TypeScript files
{test: /\.ts$/, loader: 'ts-loader'},
// Include all HTML files
{test: /\.html$/, loader: 'raw-loader'},
// Include all CSS files
{test: /\.css$/, loader: 'raw-loader'},
]
},
// Plugin configuration
plugins: [
// Bundle all third party libraries
new CommonsChunkPlugin({name: 'vendor', filename: 'vendor.bundle.js', minChunks: Infinity}),
// Uglify all bundles
new UglifyJsPlugin({compress: {warnings: false}}),
],
// Linter configuration
tslint: {
emitErrors: false,
failOnHint: false
}
};
// Helper functions
function root(args) {
args = Array.prototype.slice.call(arguments, 0);
return path.join.apply(path, [__dirname].concat(args));
}
Run Code Online (Sandbox Code Playgroud)
好处:
缺点:
免责声明:这是Http 1.*的一个很好的解决方案,因为它可以最大限度地减少每个Http请求的开销.您只有index.html和每个包的请求 - 但不是100 - 200个文件.目前,这是要走的路.
另一方面,Http 2试图最小化Http开销,因此它基于流协议.此流能够双向通信(客户端< - >服务器),并且可以实现更智能的资源加载(您只加载所需的文件).该流消除了大部分Http开销(Less Http往返).
但它与IPv6相同:人们将真正使用Http 2需要几年的时间
Bro*_*cco 21
您需要确保只是部署Angular CLI生成的项目中的dist(可分发的简称)文件夹.这允许该工具获取源代码及其依赖项,并且只为您提供运行应用程序所需的内容.
话虽如此,Angular CLI在生成构建方面存在问题,通过`ng build --prod
昨天(2016年8月2日)发布了一个版本,它将构建机制从西兰花 + systemjs切换到成功处理生产构建的webpack.
基于以下步骤:
ng new test-project
ng build --prod
Run Code Online (Sandbox Code Playgroud)
我看到这里列出的14个文件的文件dist
夹大小为1.1 MB:
./app/index.js
./app/size-check.component.css
./app/size-check.component.html
./favicon.ico
./index.html
./main.js
./system-config.js
./tsconfig.json
./vendor/es6-shim/es6-shim.js
./vendor/reflect-metadata/Reflect.js
./vendor/systemjs/dist/system.src.js
./vendor/zone.js/dist/zone.js
Run Code Online (Sandbox Code Playgroud)
注意目前要安装angular cli的webpack版本,你必须运行...npm install angular-cli@webpack -g
Yak*_*ain 14
Angular本身有很多依赖项,CLI的beta版下载的文件数量是其四倍.
这是如何创建一个简单的项目将减少文件("只"10K文件) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
mag*_*guy 13
最近使用 angular cli 创建了一个新项目,并且 node_modules 文件夹是 270 mb,所以是的,这是正常的,但我确信大多数新开发人员对 angular 世界都有疑问并且是有效的。对于一个简单的新项目,将依赖项减少一点可能是有意义的;) 不知道所有包所依赖的内容可能有点令人不安,尤其是对于第一次尝试 cli 的新开发人员。此外,大多数基本教程都没有讨论部署设置以获取仅需要的导出文件。我什至不相信 angular 官方网站上提供的教程讨论如何部署简单的项目。
Pet*_*sen 12
似乎没有人提到过如下所述的Ahead-of-Time Compilation:https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
到目前为止,我对Angular的体验是,AoT创建了最小的构建,几乎没有加载时间.最重要的是这里的问题是 - 您只需要将一些文件发送到生产中.
这似乎是因为Angular编译器不会随生产版本一起提供,因为模板是"提前"编译的.将HTML模板标记转换为javascript指令也非常酷,这些指令很难在原始HTML中进行逆向工程.
我制作了一个简单的视频,其中我展示了开发版与AoT版本中的Angular应用程序的下载大小,文件数量等 - 您可以在此处看到:
你会在这里找到演示的源代码:
https://github.com/fintechneo/angular2-templates
并且 - 正如所有其他人所说的那样 - 当您的开发环境中有许多文件时,没有任何错误.这就是Angular和许多其他现代框架所带来的所有依赖关系.但这里的区别在于,当运送到生产时,您应该能够将其打包成几个文件.此外,您不希望git存储库中包含所有这些依赖项文件.
这实际上不是Angular特有的,几乎任何使用NodeJs/npm生态系统进行工具的项目都会发生这种情况.
这些项目位于node_modules文件夹中,并且是您的直接依赖项需要运行的过渡依赖项.
在节点生态系统中,模块通常很小,这意味着我们不是自己开发东西,而是倾向于以模块的形式导入我们需要的大部分内容.这可以包括像着名的左键功能这样的小东西,为什么不写作练习呢?
因此,拥有大量文件实际上是一件好事,这意味着一切都非常模块化,模块作者经常重复使用其他模块.这种模块化的简易性可能是节点生态系统增长如此之快的主要原因之一.
原则上这不应该导致任何问题,但似乎你遇到谷歌应用程序引擎文件计数限制.在我的情况下,我建议不要将node_modules上传到app引擎.
而是在本地构建应用程序并上传到谷歌应用程序引擎只有捆绑的文件,但不要上传到应用程序引擎本身.
如果您使用的是角度cli的较新版本 ng build --prod
它将创建具有较少文件的dist文件夹,并且项目的速度将增加.
此外,您可以使用具有最佳角度cli性能的本地测试 ng serve --prod
如果使用Angular CLI,则在创建项目时始终可以使用--minimal标志
ng new name --minimal
Run Code Online (Sandbox Code Playgroud)
我只是用旗帜运行它,它创建了24 600个文件并ng build --prod
生成212 KB dist文件夹
因此,如果您的项目中不需要喷泉,或者只是想快速测试一下,我认为这非常有用
归档时间: |
|
查看次数: |
52323 次 |
最近记录: |