fis3打包中的一些注意事项
1.在html文件中,如果在标签的style属性内添加路径,fis不会识别改路径并打包,如
2.fis主要针对静态文件进行打包。对其他文件打包会出现一些问题。
比如jsp页面。下面的例子script.jsp(这个jsp会在其他页面使用<%@include file="/WEB-INF/include/script.jsp"%>引用,里面有两个变量MOD_NOT_INCLUDED和JQUERY_NOT_INCLUDED,初始值都是true)
2.1 jsp中引用mod.js
- <%if(MOD_NOT_INCLUDED){%>
- <script type="text/javascript" src="/common/dep/mod.js"></script>
- <%MOD_NOT_INCLUDED=false;}%>
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/common/dep/jquery.js"></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
- <script src="/js/wording.js" type='text/javascript'></script>
注意:fis会检查引用的名称为mod.js的引用(mod.js是fis默认模块加载脚本,改成别的名称fis就不会识别了),将mod.js的引用放在<body></body>的最后面;如果本页面没有body标签则导致mod.js无地方放置,最终编译后的结果是
- <%if(MOD_NOT_INCLUDED){%>
- <%MOD_NOT_INCLUDED=false;}%>
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/static/pc-dev/common/dep/jquery.js"></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
<script type="text/javascript" src="/common/dep/mod.js"></script>没有了。
注意续:如果mod.js放置成功(本文件有body标签),然后收集这个文件中的所有外部引用js引用,然后将js的引用放在mod.js引用的后面,css引用然后将css引用放在<head></head>的最后面,。我们将上面的例子更改为
- <link rel="stylesheet" type="text/css" href="/common/css/common.scss" />
- <%if(MOD_NOT_INCLUDED){%>
- <body>
- <script type="text/javascript" src="/common/dep/mod.js"></script>
- </body>
- <%MOD_NOT_INCLUDED=false;}%>
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/common/dep/jquery.js"></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
编译结果是
- <link rel="stylesheet" type="text/css" href="/static/pc-dev/common/css/common.css" />
- <%if(MOD_NOT_INCLUDED){%>
- <body>
- <script type="text/javascript" src="/static/pc-dev/common/dep/mod.js"></script>
- <script type="text/javascript" src="/static/pc-dev/common/dep/jquery.js"></script>
- </body>
- <%MOD_NOT_INCLUDED=false;}%>
- <%if(JQUERY_NOT_INCLUDED){%>
- <%JQUERY_NOT_INCLUDED=false;}%>
但是无论如何只要jsp中引用mod.js都可能导致脚本引入位置发生改变,从而导致逻辑混乱(如上面的MOD_NOT_INCLUDED判断根本没有起到任何作用)。
2.2 jsp的引入脚本中使用data-loader属性
如下实例
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/common/dep/jquery.js" data-loader></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
fis编译结果
- <%if(JQUERY_NOT_INCLUDED){%>
- <%JQUERY_NOT_INCLUDED=false;}%>
结果是脚本没有了。说明:使用data-loader属性,脚本会被收集,并且放在<body></body>的最后面,如果没有body标签则导致脚本无处放置。
我们加上body标签
- <%if(JQUERY_NOT_INCLUDED){%>
- <body>
- <script type="text/javascript" src="/common/dep/jquery.js"></script>
- </body>
- <%JQUERY_NOT_INCLUDED=false;}%>
- <script src="/js/wording.js" type='text/javascript'></script>
编译结果
- <%if(JQUERY_NOT_INCLUDED){%>
- <body>
- <script type="text/javascript" src="/static/pc-dev/common/dep/jquery.js"></script>
- <script type='text/javascript' src="/static/pc-dev/js/wording.js"></script>
- </body>
- <%JQUERY_NOT_INCLUDED=false;}%>
说明:fis检测到页面中有body也会去收集js引用,然后放置在body标签中。
将data-loader去掉
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/common/dep/jquery.js"></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
- <script src="/js/wording.js" type='text/javascript'></script>
编译结果
- <%if(JQUERY_NOT_INCLUDED){%>
- <script type="text/javascript" src="/static/pc-dev/common/dep/jquery.js"></script>
- <%JQUERY_NOT_INCLUDED=false;}%>
- <script src="/static/pc-dev/js/wording.js" type='text/javascript'></script>
2.3 jsp脚本中有body标签
刚才在2.2中有body标签的例子说明
2.4 jsp中使用其他需要加载外部文件的情况
项目中用到imweb-tplv2模板插件。里面的文件一般有.tpl/.js/.css三种.js是入口文件,引用.tpl和.css文件。在jsp中使用的时候fis编译会收集这些js和css,将css文件引用放在head标签纸,js引用放到body中。如果这两个标签没有则会导致这些引用全部没有。
===================================
2019.11.29 后记
本来不准备把这篇文章发布出来的,因为这是早些时候的文章了,当时想着后面会完善,但是后面没有时间和精力,而且当前使用fis3打包的不多了。但是毕竟写了,留个纪念,纪念我曾经用过fis3,后面这篇文章也不会维护了。
fis3打包中的一些注意事项的更多相关文章
- unity3d 资源文件从MAX或者MAYA中导出的注意事项
unity3d 资源文件从MAX或者MAYA中导出的注意事项 1.首先,Unity3d 中,导出带动画的资源有2种导出方式可以选择: 1) 导出资源时,只导出一个文件,保留模型,骨骼和所 ...
- delphi中httpencode使用注意事项
delphi中httpencode使用注意事项 一.uses HTTPApp二.使用前要用UTF8Encode转换成utf-8编码HTTPEncode(UTF8Encode(Text));不然和标准的 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- PHP7中session_start 使用注意事项,会导致浏览器刷时页面数据不更新
//PHP7中session_start 使用注意事项, session_start([ 'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文 ...
- 关于myBatis配置中的一些注意事项
最近在学习mybatis,在网上查阅资料,并按照别人的范例来测试,总会出一些错误,这里把配置过程中的一些注意事项梳理一下. 一.导包(用eclipse开发) 1.如果你新建的是普通的project,需 ...
- Servlet中的一些注意事项
servlet中的一些注意事项 1 什么是servlet? 1)Servlet是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servle ...
- ios使用jspatch中需要注意的事项
第一份代码,为了纠正原代码不显示29号的bug,先上代码 require('NSString','MCDatePickType','NSMutableArray','UIButton'); defin ...
- iOS开发中xib和Storyboard中需要注意的事项
使用xib注意事项: 1.只有自带view的控件才可以使用xib,因为它本身就是一个view 2.在使用可视化控件添加属性(代码)时候,如果删除了属性代码,一定要在xib上解除关联(不然会崩溃) 3. ...
- Python 打包中 setpy.py settuptools pbr 的了解
背景 nova服务构建失败,报错: 'tests_require' must be a string or list of strings containing valid project/versi ...
随机推荐
- Markdown: color list
Color name | hex character | Name AliceBlue #F0F8FF rgb(240, 248, 255) AntiqueWhite #FAEBD7 rgb(250, ...
- iOS技术博客
iOS 技术提高 原文 http://blog.devtang.com/2014/07/27/ios-levelup-tips/# 1.阅读博客 美团技术博客 https://tech.meituan ...
- 1、netty入门说明
netty中的例子,基本模式都是:server -> Initializer -> Handler . 在server中去启动线程,打开端口,设置initializer,和一些启动的参数配 ...
- Linux中crontab定时任务
crontab安装(centOS) yum -y install vixie-cron crontab语法(计划任务) crontab [-u user] file crontab [-u user] ...
- 关于字符串的格式化----format与%
格式化字符串一般有两种方法 1.%(d整数,s字符,f浮点数) 2.format 用处极为广泛且限制不多 注意:第一种对于数组的传递会报TypeError,所以必须传递数组 a = (1, 2, 3) ...
- 如何将pyqt5的qt-designer设计出来的 .ui 和 .qrc 文件转化成 .py 文件
一.pyrcc5的使用 1.1 作用 将 .qrc 资源文件转换成py文件,并在主程序中通过 import 引入 1.2 资源文件编写说明 创建一个icon.qrc,代码如下: <RCC> ...
- RTP Payload Format for VP8 Video
整体结构 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+ ...
- jQuery入门和DOM对象
jQuery入门和DOM对象 1.开发准备 1. 下载的版本: jquery-3.3.1.min.js :压缩版,发布版84.8KB jquery-3.3.1.js :常规版,开发版265KB 2. ...
- java之类的构造方法
构造器的特征: 具有和类相同的名称: 不声明返回值的类型: 不能被static.final.synchronized.abstract.native修饰,不能有return语句返回值: 构造器的作用: ...
- 批量群发,营销必备!Python代码实现自动发送邮件!
在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法 SMTP是发送邮件的协议, ...