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 相关文章推荐
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
Mar 05 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
jquery验证手机号是否正确实例讲解
Nov 17 Javascript
详解Angular2响应式表单
Jun 14 Javascript
vue router2.0二级路由的简单使用
Jul 05 Javascript
Vue基于NUXT的SSR详解
Oct 24 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
微信小程序中weui用法解析
Oct 21 Javascript
vue实现商品列表的添加删除实例讲解
May 14 Javascript
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
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
Vue实现导航栏菜单
2020/08/19 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python中偏函数用法示例
2018/06/07 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python构造函数init实例方法解析
2020/01/19 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
python 制作简单的音乐播放器
2020/11/25 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
决心书范文
2014/03/11 职场文书
2014年稽查工作总结
2014/12/20 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
单位同意报考证明
2015/06/17 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript