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学习之闭包分析
Dec 02 Javascript
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
JS验证字符串功能
Feb 22 Javascript
laydate日历控件使用方法详解
Nov 20 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
Vue常见面试题整理【值得收藏】
Sep 20 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 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高级对象构建 多个构造函数的使用
2012/02/05 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP 断点续传实例详解
2017/11/11 PHP
js url传值中文乱码之解决之道
2009/11/20 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python框架django项目部署相关知识详解
2019/11/04 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
市场营销大学生职业规划书
2014/02/25 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
小学教师岗位职责
2015/04/02 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
总经理致辞
2015/07/29 职场文书
记者节感言
2015/08/03 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL