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取消文本选定的实现代码
Nov 14 Javascript
jQuery html()方法使用不了无法显示内容的问题
Aug 06 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
Oct 20 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
Jan 13 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
vue.js开发环境搭建教程
May 04 Javascript
微信小程序tabBar底部导航中文注解api详解
Aug 16 Javascript
每周一练 之 数据结构与算法(Stack)
Apr 16 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
php 数组的一个悲剧?
2011/05/11 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
Python截图并保存的具体实例
2021/01/14 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
中学生学习保证书
2015/02/26 职场文书
升学宴来宾致辞
2015/07/27 职场文书
九九重阳节致辞
2015/07/31 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js