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 相关文章推荐
JavaScript 核心参考教程 内置对象
Oct 13 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
Feb 10 Javascript
jquery实现的Accordion折叠面板效果代码
Sep 02 Javascript
15个常用的jquery代码片段
Dec 19 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
Sep 22 Javascript
JavaScript的词法结构精华篇
Oct 17 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 Javascript
JS前端模块化原理与实现方法详解
Mar 17 Javascript
Vue实现购物车基本功能
Nov 08 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
和平主题的演讲稿
2014/01/12 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
护理专业自荐信范文
2015/03/06 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
python基础入门之字典和集合
2021/06/13 Python
深入理解python协程
2021/06/15 Python