webpack 单独打包指定JS文件的方法


Posted in Javascript onFebruary 22, 2018

背景

最近接到一个需求,因为不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改。因此,需要用webpack单独打包指定文件。

CommonsChunkPlugin

module.exports = {
 entry: {
 app: APP_FILE // 入口文件
 },
 output: {
 publicPath: './dist/', //输出目录,index.html寻找资源的地址
 path: BUILD_PATH, // 打包目录
 filename: '[name].[chunkhash].js', // 输出文件名
 chunkFilename: '[name].[chunkhash].js' // commonChunk 输出文件
 }
}

题外话

{

先说一下publicPath , 这边有一个注意的点,即路径写成 ./dist 相对路径。如果写成/dist/这种绝对路径,有一个弊端是当nginx把前端的包没有放在根目录的情况下,index.html会访问资源失败。因此推荐写成相对路径,但是当使用相对路径时,有会存在一个潜在的问题,即项目本身的路由访问如果是HTML5模式,而不是使用hash时(路由上有一个#号),那么项目一样会部署失败。angular,react都会有这样的问题,vue没用过,应该类似。此时的解决办法是,在index.html的head中添加base标签,即:

<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
 <base href="/" rel="external nofollow" >
</head>

}

webpack本身基于模块化,因此大多数情况下,我们仅需要一个入口文件就可以搞定。而针对本次需求,需要在app,这个入口之外再添加一个入口文件。即:

entry: {
 app: APP_FILE // 入口文件
 ip: IP_FILE
 },

仅这样对webpack配置之后,dist文件会成功打出app.xxx.js及ip.xxx.js,但是打包出的项目还是会报错,解决办法是:维持IP的入口文件不变,但是把它当作commonChunk来处理。即在plugins中加入:

new webpack.optimize.CommonsChunkPlugin({name: 'ip', minChunks: Infinity}),

这样保证优先加载ip.xxx.js,避免报错。

缺点:这样打包有一个很明显的缺点,即是打包出的文件是压缩的,不方便对文件进行二次修改。(没有找到解决压缩的办法)

CopyWebpackPlugin

最终解决办法,还是通过让ip.js这个文件脱离项目的模块化,然后在index.html中单独引用。(这是最开始就想到的解决办法,但并不是自己想要的解决方案,但无奈认知有限,没有解决掉之前的问题)。

解决流程:

首先在webpack引入CopyWebpackPlugin, 配置代码:

new CopyWebpackPlugin([
  {from: './src/config/ip.js', to: 'ip.js'},
 ])

在index.html中单独引入script标签,注意要配置一个随机后缀,即:

<script>
 document.write("<s"+"cript type='text/javascript' src='./dist/ip.js?"+Math.random().toString(36).substr(2)+"'></scr"+"ipt>");
</script>

防止ip.js因为缓存导致问题。

以上,就解决了webpack单独打包指定js的问题。

ps:希望有更好的方法来分享给我。

这篇webpack 单独打包指定JS文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
css图片自适应大小
Nov 28 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
百度搜索框智能提示案例jsonp
Nov 28 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
webpack中使用iconfont字体图标的方法
Feb 22 #Javascript
微信小程序之圆形进度条实现思路
Feb 22 #Javascript
webpack下实现动态引入文件方法
Feb 22 #Javascript
JavaScript 有用的代码片段和 trick
Feb 22 #Javascript
3种vue路由传参的基本模式
Feb 22 #Javascript
webpack打包并将文件加载到指定的位置方法
Feb 22 #Javascript
vue2.0 elementUI制作面包屑导航栏
Feb 22 #Javascript
You might like
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python配置文件写入过程详解
2019/10/19 Python
浅析matlab中imadjust函数
2020/02/27 Python
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
吸烟检讨书2000字
2014/02/13 职场文书
腾讯广告词
2014/03/19 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
深入浅析React中diff算法
2021/05/19 Javascript
Java实现简易的分词器功能
2021/06/15 Java/Android
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS