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 相关文章推荐
IE event.srcElement和FF event.target 功能比较
Mar 01 Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 Javascript
javascript编码的几个方法详细介绍
Jan 06 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
开发Vue树形组件的示例代码
Dec 21 Javascript
JavaScript进制转换实现方法解析
Jan 18 Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
使用PHP编写的SVN类
2013/07/18 PHP
php提高网站效率的技巧
2015/09/29 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
Gird事件机制初级读本
2007/03/10 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
小学教师教育随笔
2015/08/14 职场文书
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers