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 相关文章推荐
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
jquery一句话全选/取消全选
Mar 01 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
javascript中的原型链深入理解
Feb 24 Javascript
JS实现灵巧的下拉导航效果代码
Aug 25 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
Jquery获取radio选中的值
May 05 jQuery
vue实现全选、反选功能
Nov 17 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
通过实例了解js函数中参数的传递
Jun 15 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
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
python实现教务管理系统
2018/03/12 Python
将python代码和注释分离的方法
2018/04/21 Python
Python常用特殊方法实例总结
2019/03/22 Python
Python求解正态分布置信区间教程
2019/11/20 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
质检部岗位职责
2013/11/11 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
招标承诺书
2014/08/30 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
思想品德评语大全
2014/12/31 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
Redis性能监控的实现
2021/07/09 Redis
MYSQL 运算符总结
2021/11/11 MySQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang