一. Integration

下文摘自webpack中文网:

首先我们要消除一个常见的误解,webpack是一个模块打包工具(module bundler),它不是一个任务执行工具,任务执行器是用来自动化处理开发中常见任务的,例如检查(lint),构建(build),测试(test)等。相对于打包器,任务执行器所面对的逻辑问题更为上层,你可以使用上层的工具来管理整个持续集成(CI),而把打包的部分交给webpack

webpack在工具链中的角色定位是非常清晰的,那么为了与其他流程进行合作,就需要使用任务管理工具来启动webpack,本文介绍两种常见的方法。

1. 使用Node-API

webpak暴露了一些方法,使得开发者可以通过调用他们而在脚本中启动webpack,使用的方法较为简单:

//webpack-node.js
const webpack = require('webpack');
const webpackConfig = require('./webpack.config.html.js');
const cowsay = require('cowsay'); const compiler = webpack(webpackConfig); compiler.run((err, stats)=>{
if (!err) {
console.log(stats.toJson().assets);
console.log(cowsay.say({text:'Congratulations!'}));
} });

运行结果:

这里解释一下上面代码的基本逻辑,引入了webpack模块以及webpack.config.html.js的配置文件(从这里就很容易理解为什么webpack的配置文件可以导出为一个函数或多个配置,它实际上也是作为一个模块参与到整个运行过程的),通过调用webpack([Object config])方法得到一个compiler实例,调用compiler.run方法就启动了webpack的构建功能,run方法的回调函数中如果有运行错误,可以通过err来获取,与构建过程有关的信息都挂载在stats对象(例如stats。toJson().assets)。这样便实现了以非命令行的方式启动webpack

2.使用gulp

gulp是基于流的任务管理工具,实际上webpack的细分功能使用gulp也可以做到,而且很多功能型插件都会提供针对grunt,gulpwebpack等不同工具的集成方式。gulp的确更适合做宏观意义上的任务流管理,还是那句老话,工具是提供便利的,而不是提供束缚的。官方文档也提供了如下代码示例:

//gulpfile.js
var gulp = require('gulp');
var webpack = require('webpack-stream');
gulp.task('default',function(){
return gulp.src('src/entry.js')
.pipe(webpack({
//...configs
})).pipe(gulp.dest('dist/'));
})

二. after webpack

至此,webpack已经被集成进了自动化工具链,开发者可以按自己的需求来定制构建以后需要执行的任务,但webpack的使命还没有结束,构建的结束距离用户能够访问站点和使用功能还需要非常多的工作要做,有很多问题并不是在构建中出现的,但是却需要在构建时加以处理,这个时候开发者又需要回过头来为webpack增加配置。

例如很多开发者最初不理解构建过程中为什么要使用hash,chunkhash等占位符来把文件名变得丑陋无比,直到不同版本的产品上线时出现不强制刷新页面就无法访问新资源的问题时,才会开始关注版本更新和缓存策略的问题,然后才会理解为了标记版本而启用hash,为了避免重复构建而使用chunkhash,为了减小体积而使用tree-shaking等等。

三. 鸣谢

webpack 系列文章结束了,在这里感谢大家的阅览和支持,如果您觉得我的分享对您有帮助,您可以持续关注,我将会继续给大家分享计算机科学方面文章,您如果对什么知识感兴趣或者有疑问,请您留言说明,我会挑一些典型的具体讲解和分享。感谢大家!

作者:大史不说话

链接:Webpack4.0各个击破(10)integration篇

来源:博客园

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. HTML5存储之 indexedDB
  2. stm32定时器实现60秒定时秒表
  3. 利用轮播原理结合hammer.js实现简洁的滑屏功能
  4. iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
  5. Spring container vs SpringMVC container(webmvc container)
  6. iOS开发之内购-AppStore
  7. windows下使用代理连接github
  8. Codeforces Round #323 (Div. 1) B. Once Again... 暴力
  9. Use GraceNote SDK in iOS(一)通过序列化GDO查询专辑封面
  10. NetFlow
  11. LDA 资料整理
  12. nyoj_239:月老的难题@_@(二分图匹配基础题)
  13. HTML5 开发APP( 环境配置)
  14. Linux批量处理文件脚本
  15. [Luogu2852][USACO06DEC]牛奶模式Milk Patterns
  16. Laravel资源理由器跟隐式控制的对比及是怎样的吧?- Route::resource vs Route::controller
  17. 我今天遇到的条件语句Integer类型的
  18. vue的中vuex为何需要mutation更新状态,vue-router的路由的理解
  19. 20175312 2018-2019-2 《Java程序设计》第5周学习总结
  20. 字符串日期转化以及yyyy-MM-dd HH:mm:ss大小写解释

热门文章

  1. easyui中刷新列表
  2. 用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
  3. [leetcode33Search in Rotated Sorted Array]在排序旋转后序列中找目标值
  4. Java基础经典案例
  5. linux根文件系统 /etc/resolv.conf 文件详解
  6. PHPExcel-Helper快速构建Excel
  7. 美业黑科技 ▏肌肤管家SkinRun V3S智能肌肤测试仪,实现“护肤”私人定制
  8. maven 的安装与配置详细步骤
  9. 深入理解MySQL索引(下)
  10. MySQL45讲:一条update语句是怎样执行的