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 相关文章推荐
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
JavaScript多并发问题如何处理
Oct 28 Javascript
Bootstrap每天必学之滚动监听
Mar 16 Javascript
AngularJS上拉加载问题解决方法
May 23 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
vue-router命名视图的使用讲解
Jan 19 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
Aug 07 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
微信小程序返回上一级页面的实现代码
Jun 19 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
关于PHP实现异步操作的研究
2013/02/03 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
javascript脚本调试方法小结
2008/11/24 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
护理个人求职信范文
2014/01/08 职场文书
日语系毕业求职信
2014/07/27 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
社保转移委托书范本
2014/10/08 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
报案材料怎么写
2015/05/25 职场文书
导游词之天津盘山
2019/11/01 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server
Python如何用re模块实现简易tokenizer
2022/05/02 Python