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的面向对象的特性实现限制试用期
Aug 04 Javascript
利用a标签自动解析URL分析网址实例
Oct 20 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
详解Node.js开发中的express-session
May 19 Javascript
浅谈Vue初学之props的驼峰命名
Jul 19 Javascript
React Hooks的深入理解与使用
Nov 12 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 Javascript
JavaScript 反射学习技巧
Oct 16 Javascript
cypress测试本地web应用
Jun 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
javascript 实现map集合
2015/04/03 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
python抓取网页内容示例分享
2014/02/24 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python常用知识点汇总
2016/05/08 Python
使用python接入微信聊天机器人
2020/03/31 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
新大陆软件面试题
2016/11/24 面试题
Windows和Linux动态库应用异同
2016/07/28 面试题
文艺晚会策划方案
2014/06/11 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers