NodeJs:“require” 函数详解
NodeJs:“require” 函数详解,懂这个你就懂NodeJs了
背景
一直想在服务器端使用一种语言,ruby、phthon和php也都学过,对于我来说使用这三种语言需要一定的上下文切换成本。正在我纠结的时候,NodeJs出现了,而且我自信对Javascript还是比较熟悉的,因此就准备学习一下NodeJs。这样我的语言组合为:C#、Javascript和NodeJs,全是C Style,几乎没有切换成本。
NodeJs
网上关于NodeJs的论述很多,此处不多说。个人认为,NodeJs的编程思想和客户端Javascript保持了一种理念,没有什么变化,只是增加了“require()”函数,因此只要学好require函数,剩下的问题就是如何更好的使用API了。
require函数详解
路径
相对路径之当前目录:./xxx/xxx.js 或 ./xxx/xxx。
相对路径之上级目录:xxx/xxx.js 或 xxx/xxx。
绝对路径:F:/xxx/xxx.js 或 /xxx/xxx.js 或 /xxx/xxx。
require函数语法
require(路径.扩展名):
如果 路径.扩展名 存在
执行加载 并 返回
否则
抛出异常
require(路径):
如果 路径.js 存在
执行加载 并 返回
如果 路径.node 存在
执行加载 并 返回
如果 路径/package.json 存在
执行加载(package.json 中 main属性对应的路径) 并 返回
如果 路径/index.js 存在
执行加载 并 返回
如果 路径/index.node 存在
执行加载 并 返回
抛出异常
require(模块名字):
如果 模块名字是系统模块
执行加载 并 返回
如果 require(./node_modules/模块名字) 能加载到模块 //参考require(路径)的介绍
执行加载 并 返回
如果 require(node_modules/模块名字) 能加载到模块 //参考require(路径)的介绍
执行加载 并 返回
沿着目录向上逐级执行require(上级目录/node_modules/模块名字),如果能加载到模块 //参考require(路径)的介绍
执行加载 并 返回
抛出异常
代码示例
文件结果
require_study.js中的代码
1 require('module_1_1.js' );
2 require('module_1_2' );
3 require('node_modules/module_2_1.js' );
4 require('node_modules/module_2_2' );
5 require('package_2_1' );
6 require('package_3_1' );
7 require('./node_modules/package_3_2' );
8 require('module_3_1' );
9 require('/node_study/level1/level2/level3/node_modules/module_3_1' );
10 require('module_3_2' );
11 require('/node_study/level1/level2/level3/package_3_3' );
12 require('./package_3_4' );
13 require('./module_3_3' );
14 require('same_name_module' );
15 require('same_name_package' );
16 require('same_name_module_and_package');
输出结果
1 module_1_1.js 2 module_1_2.js 3 module_2_1.js 4 module_2_2.js 5 package_2_1 6 package_3_1 7 package_3_2 8 module_3_1.js 9 module_3_2.js 10 package_3_3 11 package_3_4 12 module_3_3.js 13 same_name_module.js in leaf 14 same_name_package in leaf 15 same_name_module_and_package.js in leaf module
代码下载: http://yunpan.cn/QWIiPxdZdW8RG
备注
刚接触NodeJs,还没有深入学习其API,包括我对require的理解,也不一定正确,欢迎批评和指正。关于require(模块名字),应该有一个全局查找路径,今晚我再查查资料。
FlexPaper二次开发问题及搜索高亮显示
最近有个需求,做一个IT知识库,类似于文库,说到文库肯定会用到在线浏览文档了,所有在网上翻阅了一下类似豆丁的在线浏览器插件的资料,将其进行了二次开发,在这跟需要用到的朋友分享一下,下面部分内容用到有些前辈的博客内容,首次写博,写的不好之处请见谅。。。高手勿喷,O(∩_∩)O谢谢
1.前期准备工作
1.首先二次开发,当然前提是需要一份FlexPaper的源码。源码下载地址:
https://files.cnblogs测试数据/yimiao/FlexPaper.rar
2.由于开发需要Adobe Flash Builder,我用的版本是4.5的
在这里贴一篇关于Adobe Flash Builder4.5的下载及安装方面的博客供大伙参阅一下。博客:
准备工作做完之后,接着往下看:
2.源码修改
首先在flash builder中新建一个flex项目,第一步填写项目名称FlexPaperViewer,第二步直接默认,最后一步也无需更改。
1.1然后把你1步下载下来的源码解压。
1.2将这个文件直接拷贝到FlexPaperView项目中,如下图显示:
2. 1将项目下FlexPaperViewer/src/默认包/FlexPaperViewer.mxml文件内容换成:
1 <?xml version= " 1.0 " encoding= " utf-8 " ?>
2 <mx:Application xmlns:mx= " http://HdhCmsTestadobe测试数据/2006/mxml "
3 xmlns:fp= " com.devaldi.controls.flexpaper.* "
4 layout= " absolute " width= " 100% " height= " 100% "
5 applicationComplete= " initApp(); " >
6
7 <mx:Script>
8 <! [CDATA[
9 import mx.controls.Alert;
10
11 public var _aid = 0 ; // 文档ID
12
13 [Bindable]
14 public var _Scale:Number = 1 ; // 缩放比例
15
16 [Bindable]
17 public var _SwfFile:String = "" ; // SWF文件路径
18
19 [Bindable]
20 public var _ZoomTransition:String = " easeOut " ;
21
22 [Bindable]
23 public var _ZoomTime:Number = 0.6 ;
24
25 [Bindable]
26 public var _ZoomInterval:Number = 0.1 ;
27
28 [Bindable]
29 public var _FitPageOnLoad:Boolean = false ; // 加载后适合高度
30
31 [Bindable]
32 public var _FitWidthOnLoad:Boolean = false ; // 加载后适合宽度
33
34 [Bindable]
35 public var _PrintEnabled:Boolean = false ; // 是否支持打印
36
37 [Bindable]
38 public var _FullScreenAsMaxWindow:Boolean = true ; // 是否支付全屏
39
40 [Bindable]
41 public var _ProgressiveLoading:Boolean = true ; // 是否延迟加载
42
43 [Bindable]
44 public var _localeChain:String = " zh_CN " ; // 语言
45
46 private var isFocus:Boolean = false ;
47
48 // 初始化参数
49 private function initApp(): void {
50 var params :Object = Application.application.parameters;
51 _Scale = getNumber( params , " Scale " , 1 );
52 _SwfFile = getString( params , " SwfFile " , " Paper.swf " );
53 _ZoomTransition = getString( params , " ZoomTransition " , " easeOut " );
54 _ZoomTime = getNumber( params , " ZoomTime " , 0.8 );
55 _ZoomInterval = getNumber( params , " ZoomInterval " , 0.1 );
56 _FitPageOnLoad = getBoolean( params , " FitPageOnLoad " , false );
57 _FitWidthOnLoad = getBoolean( params , " FitWidthOnLoad " , false );
58 _PrintEnabled = getBoolean( params , " PrintEnabled " , true );
59 _FullScreenAsMaxWindow = getBoolean( params , " FullScreenAsMaxWindow " , false );
60 _ProgressiveLoading = getBoolean( params , " ProgressiveLoading " , true );
61 _localeChain = params [ " localeChain " ];
62
63 // 注册事件监听
64 this .addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
65 this .addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
66
67 // 开放给外部(javascript)调用
68 ExternalInterface.addCallback( " hasFocus " , hasFocus);
69 // ExternalInterface.addCallback("focus", focus);
70 ExternalInterface.addCallback( " setViewerFocus " , setViewerFocus);
71 ExternalInterface.addCallback( " gotoPage " , gotoPage);
72 }
73
74
75
76 private function onMouseOver( event :MouseEvent): void {
77 this .isFocus = true ;
78 }
79
80 private function onMouseOut( event :MouseEvent): void {
81 this .isFocus = false ;
82 }
83
84 public function hasFocus():Boolean{
85 // Alert.show("hasFocus");
86 return isFocus;
87 }
88
89 public function setViewerFocus(isFocus:Boolean): void {
90 // Alert.show("setViewerFocus");
91 this .paperViewer.setViewerFocus();
92 }
93 public function gotoPage(p:Number): void {
94 this .paperViewer.gotoPage(p);
95 }
96 /* *
97 *
98 * 获取String类型参数
99 * 如果没有,则返回默认值
100 * */
101 private function getString( params :Object, name:String, def:String):String{
102 if ( params [name] != null ){
103 return params [name];
104 }
105 return def;
106 }
107
108 private function getNumber( params :Object, name:String, def:Number):Number{
109 if ( params [name] != null ){
110 return params [name];
111 }
112 return def;
113 }
114
115 private function getBoolean( params :Object, name:String, def:Boolean):Boolean{
116 // Alert.show("比较:"+name);
117 if ( params [name] != null ){
118 return params [name] == " true " ;
119 }
120 return def;
121 }
122 ]]>
123 </mx:Script>
124
125 <fp:FlexPaperViewer id= " paperViewer "
126 width= " 100% "
127 height= " 100% "
128 Scale= " {_Scale} "
129 SwfFile= " {_SwfFile} "
130 ZoomTransition= " {_ZoomTransition} "
131 ZoomTime= " {_ZoomTime} "
132 ZoomInterval= " {_ZoomInterval} "
133 FitPageOnLoad= " {_FitPageOnLoad} "
134 FitWidthOnLoad= " {_FitWidthOnLoad} "
135 PrintEnabled= " {_PrintEnabled} "
136 FullScreenAsMaxWindow= " {_FullScreenAsMaxWindow} "
137 ProgressiveLoading= " {_ProgressiveLoading} " />
138 </mx:Application>
2.2替换内容之后,运行程序,会出现如下一个错误:
点击这个错误,跳到错误语句那里,然后将其删除,不会影响程序
再运行程序,浏览器就能显示出来了
3.样式修改
3.1:去除右上角Logo,以及右下角logo
--1.去右上角logo,首先打开FlexPaperViewer.mxml文件,搜索bttnInfo,一共就三句,全部注释掉。然后再运行,就会发现右上角的logo就没了
--2.右下角Logo
打开Viewer.as文件,找到createDisplayContainer这个函数。在addChild(_skinImgDo);后面加入_skinImgDo.visible = false;(虽然不懂,但是这些看看也都能知道个大概),再运行的时候发现右下角的Logo也不见了
--3:去打印按钮
去右上角logo,首先打开FlexPaperViewer.mxml文件,搜索print,将这行注释或者删除,打印按钮也消失了
3.2:修改样式或者删除工具栏里面的按钮都可以在FlexPaperViewer.mxml文件里进行相应的操作
感觉工具栏里面的图标不好看的话,可以在网上down一些小图标然后拷贝到assets这个文件夹里面,然后将原来的图标的名字换到你的图标里面就行了
这是我换过图标的样子,大家也都可以更换一下,根据自己的喜好换换。原先的感觉太死板不怎么好看
3.3:当鼠标移到工具栏上的图标时,上面显示英文提示:如果想换成中文的话,找到文件夹路径locale/en_Us/FlexPaper.properties的这个文件,修改对应的提示如下所示:
1 # locale/en_US/ FlexPaper.properties 2 Print= 打印 3 FitWidth= 自适应宽度 4 FitPage= 自适应高度 5 Scale= 缩放 6 ThumbView= 多页显示 7 CurrentPage= 当前页 8 Search= 搜索 9 NextPage= 下一页 10 PreviousPage= 上一页 11 Fullscreen= 全屏显示 12 About= About 13 Finishedsearching= 文档搜索完成,没有找到更多的匹配项! 14 Searchfinished= 搜索完成 15 Selectprintrange= Select print range 16 All= All 17 CurrentPage= 当前页 18 Pages= Pages: 19 Enterpagenumbers=Enter page numbers and/or page ranges separated by commas. For example 1 , 3 , 5 - 12 20 Cancel= Cancel 21 IncorrectRange= Incorrect Range 22 Incorrectrangespecified= Incorrect range specified 23 About= About 24 Developedby= Developed by Devaldi. 25 Formoreinformation= For more information, see 26 CopyText= Copy Text 27 TwoPage= 两页显示 28 SinglePage= 单页显示 29 FirstPage= 首页 30 LastPage=尾页
4.高亮显示问题:
修改之后的浏览器搜索内容时,不会出现高亮显示,这是为什么呢,有的朋友可能发现,自带的文件Paper.swf就可以,为什么自己生成的swf文件不可以呢?
这个原因是因为你使用SWFTools里面这个转换工具pdf2swf.exe时,参数没给, string argsStr = PDFFilePath + " -o " + targetPath + " -T 9 -f";,加上-f就可以查找时高亮显示了
另附上pdf2swf.exe详细参数:
其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:
-h , –help Print short help message and exit 打印帮助信息
-V , –version Print version info and exit 打印版本号
-o , –output file.swf Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定输出的swf文件名
-p , –pages range Convert only pages in range with range e.g. 1-20
or 1,4,6,9-11 or
指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样
-P , –password password Use password for deciphering the pdf.指定打开pdf的密码
-v , –verbose Be verbose. Use more than one -v for greater effect.转换时输出详细的内容
-z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压缩机制
-i , –ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s , –set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. 设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
-w , –samewindow When converting pdf hyperlinks, don’t make the links open a new window. 设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t , –stop Insert a stop() command in each page. 在每页结尾添加一个stop()命令
-T , –flashversion num Set Flash Version in the SWF header to num. 设置SWF所使用的flash版本号
-F , –fontdir directory Add directory to the font search path. 指定字体文件所在路径
-b , –defaultviewer Link a standard viewer to the swf file. 指定默认的swf导航文件,用来翻页、放大缩小等等
-l , –defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading. 指定默认的swf加载文件,用来显示加载进程效果
-B , –viewer filename Link viewer filename to the swf file. 指定swf导航文件,作用同-b
-L , –preloader filename Link preloader filename to the swf file. 指定swf加载文件,作用同-l
-q , –quiet Suppress normal messages. Use -qq to suppress warnings, also. 不打印普通信息,用-qq就不打印警告信息。
-S , –shapes Don’t use SWF Fonts, but store everything as shape. 不使用字体,所有都转为形状。
-f , –fonts Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字体。
-G , –flatten Remove as many clip layers from file as possible. 在文件中尽量去除影片层,合并它们
-I , –info Don’t do actual conversion, just display a list of all pages in the PDF. 不做实际转换,仅显示PDF的信息。
-Q , –maxtime n Abort conversion after n seconds. Only available on Unix. 如果运行时间超时则退出。
基本上这个小插件的的二次开发就到这里了,写了这么多,感觉有点啰嗦。不过能帮助到大家还是很好的
分类: 小插件的那点事
标签: FlexPaper , 高亮显示 , 去Logo打印
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于NodeJs:“require” 函数详解的详细内容...