有没有办法在Node/Webpack中预先准备外部JS工具
Is there a way to prepend external JS tools in Node/Webpack?
我正在使用Vue.js构建我的前端应用程序,在那个页面上,我有(太多)Javascript外部资源:Google Analytics、Typekit、Google Charts、Intercom、Raven等。
有没有一种方法可以配置我的Webpack配置文件,并告诉它下载index.html中的链接(甚至可以在特定文件中添加URL),然后将这些链接附加到我生成的js中。
这里的目的是减少JS文件的负载,并避免出现问题(如未加载的库)。
谢谢你的帮助!
虽然这听起来像是一个简单的改进(请求更少-页面加载更快),但将所有脚本组合到一个包中通常不是一个好主意。
原因有很多:
-
CDN速度很快。除非您的捆绑包也通过CDN提供服务,否则合并这些脚本会适得其反。
-
即使是最小的代码修复,您也必须强制客户端使缓存无效,然后再次下载整个捆绑包。
-
流行的脚本(如GA)可能已经被用户的浏览器缓存,所以根本不会下载。
-
第三方脚本倾向于a)被更新b)加载其他脚本。因此,如果你将这样一个脚本的一个特定版本捆绑在一起,它可能会在不久后崩溃。
可以做什么
这些脚本中的大多数对页面渲染并不重要,因此您可以使用
- 以非阻塞方式加载脚本
- 页面完全呈现后加载脚本
我理解后果,但我真的需要捆绑这些脚本
显然,您无法将远程脚本与webpack:捆绑在一起
webpack是一个模块打包程序,而不是javascript加载程序。它从本地磁盘打包文件,不从web加载文件(除了它自己的块)。
使用javascript加载程序,例如script.js.
var $script = require("scriptjs");
$script("//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js", function() {
// ...
});
然而,您可以使用某种任务运行程序(如gullow或grunt)用外部脚本为捆绑包做准备。
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var request = require('request');
var merge = require('merge2');
var concat = require('gulp-concat');
var buffer = require('gulp-buffer');
gulp.task('js', function() {
var jquery = request('http://code.jquery.com/jquery-latest.js').pipe(source('jquery.js'));
var main = gulp.src('main.js');
return merge(jquery, main)
.pipe(buffer())
.pipe(concat('concat.js'))
.pipe(gulp.dest('dist'));
});
既然你可以将webpack集成到你的构建管道中,这似乎是一个不错的方法。
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 使用html中的外部javascript进行数据验证
- 有没有办法在Node/Webpack中预先准备外部JS工具
- 防止在工具提示外部单击时隐藏/关闭剑道工具提示
- 来自外部函数的Highchart工具提示和事件
- 来自外部来源的缩略图不会出现在随机帖子小工具中
- 外部网格分页工具栏不显示在IE上
- jqgrid工具栏搜索或外部搜索功能
- 外部搜索小工具上的谷歌分析跟踪
- 如何在Google Analytics中监控外部小工具
- tinymce-是否可以从工具栏外部调用自定义插件函数
- Jquery工具栏帮助:访问外部php脚本
- 如何从配置对象外部调用Highcharts工具提示格式化程序函数
- 如何使tinymce4工具栏处于外部并且始终可见
- 使用 Java 工具确定 JavaScript 在页面上加载哪些外部资源
- 有没有办法从外部访问 dxChart 的工具提示
- 从.js/外部文件生成工具提示文本