如何在不必同时提供`node_modules`中的所有文件的情况下为AngularJS 2应用程序提供服务?

时间:2016-01-11 20:16:08

标签: angular google-app-engine npm

我正在尝试运行Angular 2 seed application。不幸的是,npm install将大量文件放入node_modules,我认为我还必须与种子应用程序代码一起提供。

如果我只需要一些用于应用程序的工作,我不想要提供所有这些静态文件。有没有办法只服务我真正需要的那些?

我问的原因是因为Google App Engine开发环境(dev_appserver.py)限制了它可以投放的文件数量,并且生产环境对可以上传的文件的总大小有限制。上传兆字节的不必要文件会很惭愧。

6 个答案:

答案 0 :(得分:10)

在生产中使用lib的CDN版本,例如:

<script src="https://rawgithub.com/systemjs/systemjs/0.19.6/dist/system.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.0/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.0/Rx.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.0/angular2.dev.js"></script>

不仅如此,它还可以帮助您节省操作库以及如何将库移动到可分发中的功能,但如果他们从之前访问过的网页下载了最终用户,他们也可以节省一些时间。

答案 1 :(得分:6)

这是由这个种子项目的gulp脚本处理的。

https://github.com/angular/angular2-seed/blob/e66d24fd34d37884cec41a3583bad563cf5a43e5/gulpfile.js#L15

gulp任务将文件从node_modules复制到dist/vendor

//copy dependencies to dist folder
gulp.task('copy:deps', function(){
  return gulp.src([
    'node_modules/angular2/bundles/angular2-polyfills.js',
    'node_modules/angular2/bundles/angular2.dev.js',
    'node_modules/angular2/bundles/http.js',
    'node_modules/angular2/bundles/router.js',
    'node_modules/rxjs/bundles/Rx.js',
    'node_modules/systemjs/dist/system.js',
  ]).pipe(gulp.dest('dist/vendor'));
});

安装gulp之后,只需输入gulp即可启动默认gulp任务,或运行npm start来调用gulp clean && gulp

默认的gulp任务还会将所有其他.js,.html和.css文件复制到dist文件夹。 dist文件夹将包含您必须部署的内容。

答案 2 :(得分:1)

您可以在应用的配置文件中使用the skip_files element来排除不需要的文件:

  

skip_files 元素指定应用程序中的哪些文件   目录不会上传到App Engine。值是a   正则表达式或正则表达式列表。任何文件名   匹配任何正则表达式从列表中省略   上传应用程序时要上传的文件。

注意覆盖该doc部分中的默认值。

注意:我不确定这对开发服务器端是否有帮助,因为在某些情况下它似乎忽略了该配置(但我似乎无法找到我的答案而没有#&# 39;在一个这样的案例中工作以获得细节。)

答案 3 :(得分:1)

当您运行npm start时,您会收到一个dist文件夹。此文件夹包含整个应用程序。因此,无需提供node_modules

答案 4 :(得分:0)

使用angular-cli命令构建。之后你会得到一个dist文件夹。

从您的应用程序的末尾使用该dist文件夹,并使用以下app.yaml启动并运行您的项目。

https://gist.githubusercontent.com/darktable/873098/raw/0197279f7faf07a3f64689589f097790d198b22a/app.yaml

答案 5 :(得分:0)

使用Angular 2和angular-cli,它非常直接。你不需要任何gulp或自定义脚本。只需使用angular-cli ng build --prod进行构建,它就可以很好地进行树木切割,缩小并生成非常小且最佳的束。我已经写了一个small post - 在Google AppEngine或Firebase上构建和部署Angular 2应用程序。