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 相关文章推荐
YUI 读码日记之 YAHOO.lang.is*
Mar 22 Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
Jun 03 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
实例详解带参数的 npm script
May 28 Javascript
React-redux实现小案例(todolist)的过程
Sep 29 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
Element InfiniteScroll无限滚动的具体使用方法
Jul 27 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(2)
2006/10/09 PHP
PHP生成便于打印的网页
2006/10/09 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
JavaScript 学习笔记之操作符
2015/01/14 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
pycharm显示远程图片的实现
2019/11/04 Python
python文件操作的简单方法总结
2019/11/07 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Python数据正态性检验实现过程
2020/04/18 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
办公室文秘自我评价
2013/09/21 职场文书
2013年高中生自我评价
2013/10/23 职场文书
个人评价范文分享
2014/01/11 职场文书
晚宴邀请函范文
2014/01/15 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
员工趣味活动方案
2014/08/27 职场文书
金融保险专业求职信
2014/09/03 职场文书
购房协议书范本
2014/10/02 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
Python读写yaml文件
2022/03/20 Python
Python OpenGL基本配置方式
2022/05/20 Python