nodejs编译后js文件名前缀

nodejs编译后js文件名前缀,第1张

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

Node与javaScript的区别在于,javaScript的顶层对象是window,而node是global

//这里使用的var声明的变量不是全局的,是当前模块下的,用global声明的表示是全局的

var s = 100

global.s = 200

//这里访问到的s是var生命的

console.log(s)//100

//这里访问到的才是全局变量

console.log(global.s)//200

模块:在node中,文件和模块是一一对应的,也就是一个文件就是一个模块;每个模块都有自己的作用域,我们通过var申明的变量并非全局而是该模块作用域下的。

(2)module模块

1、文件查找

1)首先按照加载的模块的文件名称进行查找,如果没有找到,则会带上 .js、.json 或 .node 拓展名在加载

2)以 '/' 为前缀的模块是文件的绝对路径。 例如,require('/home/marco/foo.js') 会加载 /home/marco/foo.js 文件。

3)以 './' 为前缀的模块是相对于调用 require() 的文件的。 也就是说,circle.js 必须和 foo.js 在同一目录下以便于 require('./circle') 找到它。

4)当没有以 '/'、'./' 或 '../' 开头来表示文件时,这个模块必须是一个核心模块或加载自 node_modules 目录。

5)如果给定的路径不存在,则 require() 会抛出一个 code 属性为 'MODULE_NOT_FOUND' 的 Error。

2、module 作用域

在一个模块中通过var定义的变量,其作用域范围是当前模块,外部不能够直接的访问,如果我们想一个模块能够访问另外一个模块中定义的变量,可以有一下两种方式:

1)把变量作为global对象的一个属性,但这样的做法是不推荐的

2)使用模块对象 module。module保存提供和当前模块有关的一些信息。

在这个module对象中有一个子对象exports对象,我们可以通过这个对象把一个模块中的局部变量对象进行提供访问。

//这个方法的返回值,其实就是被加载模块中的module.exports

require('./02.js')

3、__dirname:当前模块的目录名。

例子,在 /Users/mjr 目录下运行 node example.js:

console.log(__dirname)

// 输出: /Users/mjr

console.log(path.dirname(__filename))

// 输出: /Users/mjr

4、__filename:当前模块的文件名(处理后的绝对路径)。当前模块的目录名可以使用 __dirname 获取。

在 /Users/mjr 目录下运行 node example.js:

console.log(__filename)

// 输出: /Users/mjr/example.js

console.log(__dirname)

// 输出: /Users/mjr

(3)process(进程)

process 对象是一个全局变量,提供 Node.js 进程的有关信息以及控制进程。 因为是全局变量,所以无需使用 require()。

1、process.argv

返回进程启动时的命令行参数。第一个元素是process.execPath。第二个元素是当前执行的JavaScript文件的路径。剩余的元素都是额外的命令行参数。

console.log(process.argv)

打印结果:

2、process.execPath返回启动进程的可执行文件的绝对路径。

3、process.env 返回用户的环境信息。

在process.env中可以新增属性:

process.env.foo = 'bar'

console.log(process.env.foo)

可以通过delete删除属性:

delete process.env.foo

console.log(process.env)

在Windows上,环境变量不区分大小写

4、process.pid 属性返回进程的PID。

5、process.platform属性返回字符串,标识Node.js进程运行其上的操作系统平台。

6、process.title 属性用于获取或设置当前进程在 ps 命令中显示的进程名字

7、process.uptime() 方法返回当前 Node.js 进程运行时间秒长

注意: 该返回值包含秒的分数。 使用 Math.floor() 来得到整秒钟。

8、process.versions属性返回一个对象,此对象列出了Node.js和其依赖的版本信息。

process.versions.modules表明了当前ABI版本,此版本会随着一个C++API变化而增加。 Node.js会拒绝加载模块,如果这些模块使用一个不同ABI版本的模块进行编译。

9、process对象-输入输出流

var a

var b

process.stdout.write('请输入a的值: ')

process.stdin.on('data', (chunk) =>{

if (!a) {

a = Number(chunk)

process.stdout.write('请输入b的值:')

}else{

b = Number(chunk)

process.stdout.write('a+b的值:'+(a+b))

process.exit()

}

})

(4)Buffer缓冲器

Buffer类,一个用于更好的操作二进制数据的类,我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流,Node为我们提供了一个更加方便的去操作这种数据流的类Buffer,他是一个全局的类

1、如何创建使用buffer

Buffer.from(array) 返回一个 Buffer,包含传入的字节数组的拷贝。

Buffer.from(arrayBuffer[, byteOffset [, length]]) 返回一个 Buffer,与传入的 ArrayBuffer 共享内存。

Buffer.from(buffer) 返回一个 Buffer,包含传入的 Buffer 的内容的拷贝。

Buffer.from(string[, encoding]) 返回一个 Buffer,包含传入的字符串的拷贝。

Buffer.alloc(size[, fill[, encoding]]) 返回一个指定大小且已初始化的 Buffer。 该方法比 Buffer.allocUnsafe(size) 慢,但能确保新创建的 Buffer 不会包含旧数据。

Buffer.allocUnsafe(size) 与 Buffer.allocUnsafeSlow(size) 返回一个指定大小但未初始化的 Buffer。 因为 Buffer 是未初始化的,可能包含旧数据。

// 创建一个长度为 10、且用 01 填充的 Buffer。

const buf1 = Buffer.alloc(10,1)

// 创建一个长度为 10、且未初始化的 Buffer。

// 这个方法比调用 Buffer.alloc() 更快,但返回的 Buffer 实例可能包含旧数据,因此需要使用 fill() 或 write() 重写。

const buf2 = Buffer.allocUnsafe(10)

const buf3 = Buffer.from([1, 2, 3])

const buf4 = Buffer.from('tést')

console.log(buf1)//<Buffer 01 01 01 01 01 01 01 01 01 01>

console.log(buf2)//<Buffer 00 00 00 00 08 00 00 00 07 00>

console.log(buf3)//<Buffer 01 02 03>

console.log(buf4)//<Buffer 74 c3 a9 73 74>

2、Buffer对象提供的toString、JSON的使用

1)buf.toString(encoding,start,end)

var bf = Buffer.from('miaov')

console.log(bf.toString('utf-8',1,4))//iaov

console.log(bf.toString('utf-8',0,5))//miaov

console.log(bf.toString('utf-8',0,6))//miaov

2)buf.write(string,offset,length,encoding)

string 要写入 buf 的字符串。

offset 开始写入的偏移量。默认 0,这里指的是buffer对象的起始要写入的位置。

length 要写入的字节数。默认为 buf.length - offset。

encoding string 的字符编码。默认为 'utf8'。

返回: 已写入的字节数。

var str = "miaov hello"

var bf = Buffer.from(str)

var bf2 = Buffer.alloc(8)

//从0开始写入5个

bf2.write(str,0,5)

console.log(bf)

console.log(bf2)

3)buf.toJSON()

const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5])

const json = JSON.stringify(buf)

console.log(json)

// 输出: {"type":"Buffer","data":[1,2,3,4,5]}

3、Buffer中静态方法的使用

1)Buffer.isEncoding(encoding) : 判断是否是Buffer支持的字符编码,是则返回true,不是则返回false

console.log(Buffer.isEncoding('utf-8'))//true

2)Buffer.isBuffer(obj) :如果 obj 是一个 Buffer,则返回 true,否则返回 false。

(5)fs(文件系统)

该模块是核心模块,需要使用require('fs')导入后使用,该模块主要用来操作文件

1、fs.open(path, flags, mode, callback)

path:要打开的文件的路径;

flags:打开文件的方式 读/写;

mode:设置文件的模式 读/写/执行

callback(err,fd):文件打开以后,在回调函数中做相应的处理,回调函数的两个参数:

err:文件打开失败的错误保存在err里面,如果成功err为null

fd:被打开文件的标识

var fs = require('fs')

fs.open('./test.txt','r',function(err,fd){

if(err){

console.log("文件打开失败")

}else{

console.log("文件打开成功")

}

})

2、fs.openSync(path, flags, mode) :返回文件描述符。

var fs = require('fs')

console.log(fs.openSync('./test.txt','r'))//3

3、fs.read(fd, buffer, offset, length, position, callback)

从 fd 指定的文件中读取数据;

buffer 指定要写入数据的 buffer;

offset 指定 buffer 中开始写入的偏移量;

length 指定要读取的字节数;

position 指定文件中开始读取的偏移量。 如果 position 为 null,则从文件的当前位置开始读取;

callback 有三个参数 (err, bytesRead, buffer)

示例:test.txt 中的值为123456789

fs.open('./test.txt','r',function(err,fd){

if(!err){

var bf = Buffer.alloc(5)

fs.read(fd,bf,0,5,0,function(){

console.log(bf.toString())//12345

})

}

})

4、fs.write(fd, buffer, offset, length, position, callback)

将 buffer 写入到 fd 指定的文件。

offset 指定 buffer 中要开始被写入的偏移量,length 指定要写入的字节数。

position 指定文件中要开始写入的偏移量。 如果 typeof position !== 'number',则从当前位置开始写入。

callback 有三个参数 (err, bytesWritten, buffer),其中 bytesWritten 指定 buffer 中已写入文件的字节数。

var fs = require('fs')

fs.open('./test.txt','r+',function(err,fd){

if(!err){

var bf = Buffer.alloc(5)

fs.read(fd,bf,0,5,0,function(){

console.log(bf.toString())//12345

})

var bf = Buffer.from('test数据')

fs.write(fd,bf,0,10,0)

fs.write(fd,'测试数据2',10,'utf-8')

}

})

fs.write(fd, string, position, encoding, callback)

将 string 写入到 fd 指定的文件。 如果 string 不是一个字符串,则会强制转换成字符串。

position 指定文件中要开始写入的偏移量。 如果 typeof position !== 'number',则从当前位置开始写入。

encoding 指定字符串的编码。

callback 有三个参数 (err, written, string),其中 written 指定字符串中已写入文件的字节数。 写入的字节数与字符串的字符数是不同的。

5、fs.exists(path,callback)检查指定路径的文件或者目录是否存在

fs.appendFile(path, data, callback):将数据追加到文件,如果文件不存在则创建文件。

//检查文件是否存在

var fs = require('fs')

var filename = './test2.txt'

fs.exists(filename,function(isExists){

if(!isExists){

fs.writeFile(filename,'miaov',function(err){

if(err){

console.log("文件创建失败")

}else{

console.log("文件创建成功")

}

})

}else{

fs.appendFile(filename,'-leo',function(err){

if(err){

console.log("文件内容追加失败")

}else{

console.log("文件内容追加成功")

}

})

}

})

(6)前端项目自动化构建

1、创建myProject项目文件以及对应的文件夹

var projectData ={

'name':'myProject',

'fileData':[

{

'name':'css',

'type':'dir'

},{

'name':'js',

'type':'dir'

},{

'name':'images',

'type':'dir'

},{

'name':'index.html',

'type':'file',

'content' : '<html>\n\t<head>\n\t\t<title>title</title>\n\t</head>\n\t<body>\n\t\t<h1>Hello</h1>\n\t</body>\n</html>'

}

]

}

var fs = require('fs')

if(projectData.name){

// 创建项目文件夹

fs.mkdirSync(projectData.name)

var fileData = projectData.fileData

if(fileData &&fileData.length){

fileData.forEach(function(file){

//文件或文件夹路径

file.path = './'+projectData.name +'/'+ file.name

//根据type类型创建文件或文件夹

file.content = file.content || ''

switch(file.type){

case 'dir':

fs.mkdirSync(file.path)

break

case 'file':

fs.writeFileSync(file.path,file.content)

break

default:

break

}

})

}

}

2、自动打包多个文件

var fs = require('fs')

var filedir = './myProject/dist'

fs.exists(filedir,function(isExists){

if(!isExists){

fs.mkdirSync(filedir)

}

fs.watch(filedir,function(ev,file){

//只要有一个文件发生了变化,我们就需要对文件夹下的所有文件进行读取、合并

fs.readdir(filedir,function(err,dataList){

var arr = []

dataList.forEach(function(file){

if(file){

//statSync查看文件属性

var info = fs.statSync(filedir + '/' +file)

//mode文件权限

if(info.mode === 33206){

arr.push(filedir + '/' +file)

}

}

})

//读取数组中的文件内容

var content = ''

arr.forEach(function(file){

var c = fs.readFileSync(file)

content += c.toString()+'\n'

})

//合并文件中的内容

fs.writeFileSync('./myProject/js/index.js',content)

})

})

})

(7)使用node进行web开发

1、搭建一个http的服务器,用于处理用户发送的http请求

//加载一个http模块

var http = require('http')

//通过http模块下的createServer创建并返回一个web服务器对象

var server = http.createServer()

//开启 HTTP 服务器监听连接,只有调用了listen方法以后,服务器才开始工作

server.listen(8000,'localhost')

//服务器是否正在监听连接

server.on('listening',function(){

console.log("listening..........")

})

//每次接收到一个请求时触发,每个连接可能有多个请求(在 HTTP keep-alive 连接的情况下)。

server.on('request',function(){

res.write('<p>hello</p>')

res.end()

})

2、request方法有两个参数:request、response

1)request:http.IncomingMessage的一个实例,获取请求的一些信息,如头信息,数据等

httpVession:使用的http协议的版本

headers:请求头信息中的数据

url:请求的地址

method:请求的方式

2)response:http.ServerResponse的一个实例,可以向请求的客户端输出返回响应

write(chunk,encoding):发送一个数据块到相应正文中

end(chunk,encoding):当所有的正文和头信息发送完成以后调用该方法告诉服务器数据已经全部发送完成了,这个方法在每次完成信息发送以后必须调用,并且是最后调用。

statusCode:该属性用来设置返回的状态码

setHeader(name,value):设置返回头信息

writeHead(statusCode,reasonPhrase,headers)这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用

3、使用fs模块实现行为表现分离

var http = require('http')

var url = require('url')

var fs = require('fs')

var server = http.createServer()

//html文件的路径

var htmlDir = __dirname + '/html/'

server.on('request',function(request,response){

var urlStr = url.parse(request.url)

//根据pathname匹配对应的html文件

switch(urlStr.pathname){

case '/':

sendData(htmlDir + 'index.html',request,response)

break

case '/user':

sendData(htmlDir + 'user.html',request,response)

break

case '/login':

sendData(htmlDir + 'login.html',request,response)

break

default:

//处理其他情况

sendData(htmlDir + 'err.html',request,response )

break

}

})

function sendData(file,request,response){

//读取文件,存在则返回对应读取的内容,不存在则返回错误信息

fs.readFile(file,function(err,data){

if(err){

response.writeHead(404,{

'content-type':'text/htmlcharset=utf-8'

})

response.end('<h1>页面不存在</h1>')

}else{

response.writeHead(200,{

'content-type':'text/htmlcharset=utf-8'

})

response.end(data)

}

})

}

server.listen(8000,'localhost')

制作个人主页、网站设计的最佳工具软件当属MARCOMEDIA公司的网页制作三剑客系列,其实是五个软件的组合,

其中DREAMWEAVER是用来制作页面文件的,是网页设计最重要的软件、FLASH用来创作矢量动画、FIREWORKS用来处理位图、FREEHAND用来制作矢量图形和LOGO(标志)以及BANNER(横幅广告);几个软件像OFFICE中的WORD、EXCEL等工具软件一样,整合在一起工作,将会得心应手,事半功倍。

另外FRONTPAGE也是用来制作网页的,而大名鼎鼎的PHOTOSHOP则是必备的图形处理软件。

网页制作并不简单,入门易提高难,但其中奥妙无穷,做成了会有很大的成就感。

如果你做网页只是拿来玩玩,还是建议你用FRONTPAGE,各版本之间大同小异,很容易上手,只要你用过WORD,会轻松掌握。

如果你本着提高自己、不断学习的想法来做网页设计,那你一定要用DREAMWEAVER,因为这是专职网页制作人员的不二选择。

你对网页制作一点都不了解的话,建议你去网上搜一下学习HTML语言的教程,不要觉得难,因为学HTML其实相当简单。

我的职业就是网站建设,

如果你有什么问题的话,可以跟我联络,我乐于帮助你尽快实现制作个人主页的愿望。

回答者: michealee3721 - 大魔导师 十二级 10-9 10:26

浅谈怎样快速制作个人主页

时代的发展一日千里。随着网络应用的普及,在名片上印上电子邮箱地址乃至个人主页地址是一件很自豪甚至时髦的事情,既可以展示自我又方便大家联系。免费电子邮箱到处可以申请,多的人七、八个不在话下。但个人主页则要复杂一些,首先它要先通过一些软件制作出自己的主页,甚至要扫描一定数量的照片,形成一定的风格,然后还要四处申请免费主页空间。有些提供免费服务功能的服务器并不是那么容易申请到的,申请成功后,还要通过一定的上传软件将自己制作好的主页上传到你的免费主页的服务器上。个人主页需要热情、毅力和长期维护。下面结合自己制作个人主页的实践体会,粗浅谈一下个人主页大概的制作过程,希望对大家有所帮助,也欢迎网页高手对不正确的地方提出宝贵意见。

1 整体风格的构思和素材的搜集

构思你自己打算制作的网页风格,需要重点反映的内容,比如你是一个军事发烧友(可能对坦克或飞机非常熟悉),想制作一个军事方面的主页,自己也收集了许多有关坦克或飞机的杂志,照片和文章,则你首先要分类进行取舍,选择好自己准备放到网上的图片及文字资料,准备分哪几个内容不同又相互关联的页面,每个页面反映一个什么主题,打好草稿或框架,然后进入下一步就容易快捷多了。

2 主页的制作

这是重要的一步。制作主页的工具软件很多,随便翻翻电脑杂志就会看到介绍不同的个人主页制作利器(软件)。一般有两种类型的工具软件,第一种是用纯文本HTML(超文件标记语言)语言编写,这种软件的缺点是专业性较强,需要对HTML语言比较熟悉才行,比较枯燥,有一点象DOS语言,优点是编写、修改比较快捷。第二种则是类似于大名鼎鼎的微软公司开发的FrontPage98及其升级版本,其优点是所见即所得,不需要较多的软件专业知识,甚至不需要很懂HTML语言,您只要会MS-Office97就可制作网页,而且可以用Word 97的相关功能将以前的Word文件转换为网页格式,下面重点介绍这个软件。

FrontPage 98包含有三个部分。第一部分是FrontPage Explorer, 它是FrontPage的控制台,用来管理您的不同的网站,或是开启一个既有的网站;当然也可以对开启的网站进行网站管理的操作,让您管理起网页快捷方便。第二部分是制作网页的编辑器FrontPage Editor,我们所有的编辑工作都要在FrontPage Editor下完成。第三部分是FrontPage Web Server,提供FrontPage虚拟网站的功能。整个网页的编辑、测试和管理等工作,都是可以在FrontPage 98集成环境下完成。在FrontPage Editor中掌握好2个工具,第一个是表格的使用,好的网页应该将所有的内容都用表格来分配,这样您修改自己的主页就要容易得多,而且外观也整齐美观;第二个是表单的使用,这个功能主要用于在线登录个人资料,在线注册等。个人主页可以考虑不采用表单,因为他需要免费主页服务器支持CGI(一种Script语言,属于伺服端的程序,依赖服务器上的CGI直译器才能运行)功能,而且多数免费主页提供的同时已免费提供留言板和计数器了。

在网页中,图像往往占了很大一部分,所以还需要熟悉一个图像处理软件Photoshop 5.0, 图像的大小、旋转、羽化甚至一些艺术化的加工处理都要用到它。还有就是网页上的超链接,方便浏览者获取自己感兴趣的信息,比如,您完全可以将《工程地质计算机应用》网页地址以超链接的形式放到您的主页的适当位置。

整个网页的制作同Office97差不多,操作过程应该很简单,将不同的页面制作成后,就可以利用FrontPage Web Server进行虚拟网上调试,直到自己满意为止。甚至您还可以在因特网上下载自己喜欢的图片,再粘贴到自己的主页上,使制作的主页更加个性化。

3 申请免费主页空间

现在提供免费主页空间的服务器越来越多了,但要真正申请到自己的免费主页空间,则要看你的运气。笔者曾经连续3个晚上在网上四处“奔走”,填申请表不下16~17份,最后收到回信的有5~6封,但成功登录并能上传主页的也只有一个。曾经试过在北京263上申请到了3个免费主页空间,上传密码也已拿到,但不能上传主页内容,总是报密码出错。而在广州163上申请到了2个免费主页,但只有1个上传密码成功,另一个也是报密码出错,当时以为自己操作不当,还打电话给市数据分局的电脑工程师咨询。所以劝大家还是多申请几个,如果同时几个申请都成功了,再写封回信给网管(WebMaster)告诉他取消就行了。免费主页提供商禁止一个人同时占用几个主页空间,如果拿到了网页上传的密码,这一步就算成功了。

4 上传主页

目前使用最多的也是最好用的上传软件有两个,一个是Cute FTP,另一个是WS_FTP Pro,功能差不多,很好用。笔者使用的是Cute FTP 3.5。启动上传软件时,它会自动连线上网,可以预先设置好个人主机域名和上传密码,不过一般为安全起见,建议不要填写密码,在登录时,会自动弹出对话框,手工填入密码,按回车显示欢迎界面后,点击OK,即可进入服务器上提供给你的硬盘空间。密码一定要保管妥当,如果密码泄漏,你的主页就会被“黑客”随意出入,覆盖掉你原来的主页内容。

进入自己的免费主页空间后,左侧方框内容为你本地硬盘里的内容,右侧为服务器上免费主页硬盘的内容。上传文件非常容易,用鼠标点住要上传的文件拖到右侧方框即可。这样将你在本地硬盘里用FrontPage 98制作完成的所有文件都上传完之后,你的主页已经制作完成,即可马上打开浏览器,输入你自己的主页地址,浏览自己作的主页。浏览器建议使用IE5.0,与FrontPage 98兼容性好些,如果习惯用Netscape,则浏览时显示的字体或格式与IE5.0有所不同,这点应该多上网测试,以解决好所有可能出现的问题。

5 以后的维护更新

个人主页制作成功之后,剩下的事情就是以后的维护、更新。对有些不满意的地方进行修改,或增加一些新的内容,都需要对主页进行更新,更新也很容易,利用FrontPage98制作新的页面后,打开上传软件,将要更新的页面或文件拖到右侧免费主页服务器的硬盘中,按确定键,即可更新成功。FrontPage98有个功能会自动记下你每次更新的时间和日期,并且有多种格式选择,你完全可以将这个时间戳放在主页的下面。让来访者知道主页的最新更新时间。

需要指出的一点就是,主页制作成功后,应该注意经常维护。如北京263有3个月不更新主页的话就取消您的主页空间。所以对自己的主页应该认真珍惜、维护它,使它越来越好,制作水平也会相应地得到提高。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/404237.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存