问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

nodejs编译?

发布网友 发布时间:2024-09-17 03:48

我来回答

1个回答

热心网友 时间:2024-10-25 21:38

nodejs编译后js文件名前缀

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

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

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

vars=100;

global.s=200;

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

console.log(s);//100

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

console.log(global.s);//200

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

(2)mole模块

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_moles目录。

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

2、mole作用域

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

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

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

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

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

require('./02.js');

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

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

console.log(__dirname);

//输出:/Users/mjr

console.log(path.dirname(__filename));

//输出:/Users/mjr

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

在/Users/mjr目录下运行nodeexample.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删除属性:

deleteprocess.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.moles表明了当前ABI版本,此版本会随着一个C++API变化而增加。Node.js会拒绝加载模块,如果这些模块使用一个不同ABI版本的模块进行编译。

9、process对象-输入输出流

vara;

varb;

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。

constbuf1=Buffer.alloc(10,1);

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

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

constbuf2=Buffer.allocUnsafe(10);

constbuf3=Buffer.from([1,2,3]);

constbuf4=Buffer.from('tést');

console.log(buf1);//Buffer01010101010101010101

console.log(buf2);//Buffer00000000080000000700

console.log(buf3);//Buffer010203

console.log(buf4);//Buffer74c3a97374

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

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

varbf=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。

encodingstring的字符编码。默认为'utf8'。

返回:已写入的字节数。

varstr="miaovhello";

varbf=Buffer.from(str);

varbf2=Buffer.alloc(8);

//从0开始写入5个

bf2.write(str,0,5);

console.log(bf);

console.log(bf2);

3)buf.toJSON()

constbuf=Buffer.from([0x1,0x2,0x3,0x4,0x5]);

constjson=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:被打开文件的标识

varfs=require('fs');

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

if(err){

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

}else{

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

}

});

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

varfs=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){

varbf=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指定文件中要开始写入的偏移量。如果typeofposition!=='number',则从当前位置开始写入。

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

varfs=require('fs');

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

if(!err){

varbf=Buffer.alloc(5);

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

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

});

varbf=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指定文件中要开始写入的偏移量。如果typeofposition!=='number',则从当前位置开始写入。

encoding指定字符串的编码。

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

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

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

//检查文件是否存在

varfs=require('fs');

varfilename='./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项目文件以及对应的文件夹

varprojectData={

'name':'myProject',

'fileData':[

{

'name':'css',

'type':'dir'

},{

'name':'js',

'type':'dir'

},{

'name':'images',

'type':'dir'

},{

'name':'index.html',

'type':'file',

'content':'html\n\thead\n\t\ttitletitle/title\n\t/head\n\tbody\n\t\th1Hello/h1\n\t/body\n/html'

}

]

};

varfs=require('fs');

if(projectData.name){

//创建项目文件夹

fs.mkdirSync(projectData.name);

varfileData=projectData.fileData;

if(fileDatafileData.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、自动打包多个文件

varfs=require('fs');

varfiledir='./myProject/dist';

fs.exists(filedir,function(isExists){

if(!isExists){

fs.mkdirSync(filedir);

}

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

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

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

vararr=[];

dataList.forEach(function(file){

if(file){

//statSync查看文件属性

varinfo=fs.statSync(filedir+'/'+file);

//mode文件权限

if(info.mode===33206){

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

}

}

});

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

varcontent='';

arr.forEach(function(file){

varc=fs.readFileSync(file);

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

});

//合并文件中的内容

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

})

});

});

(7)使用node进行web开发

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

//加载一个http模块

varhttp=require('http');

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

varserver=http.createServer();

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

server.listen(8000,'localhost');

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

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

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

});

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

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

res.write('phello/p');

res.end();

});

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

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

htt

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
好听简单的店铺名字店铺好听的名字大全 ...还脱皮。一年四季都这样,夏天能好一点,冬天严重时怎么回事啊?应该怎 ... 手,脚一年四季脱皮怎么办 地铁跑酷 地铁跑酷鼠小意会回归吗? 印度国家安全卫队身经百战 飞机驾驶室的机舱门在飞行时关闭么?为什么会有劫机成功的案例,不... 为什么中国不会劫机 急求翻译几个句子! 急求!!翻译句子!在线等! 我们和公婆住一起,大姑子每周末都过来耍 nodejsasync? ...和种子的在线搜索云播Web客户端 | live-torrent 【快速上手】用Node.js做简单的图片爬取 宋代流行是什么意思? 流行 是什么意思? 丁酸钠是违禁品吗 苹果手机换电池的价格是多少钱? iphone官网换电池多少钱啊? 石天儿女资料? 石天作品列表 如何理解“南风知我意,吹梦到西洲。” 南风知我意吹梦到西洲表达了什么感情 用Excel计算积分如何用excel求积分公式 小产权房的买卖有哪些风险 怎样在Excel中求积分? 小产权房子买卖有什么风险 东莞复印机维修费用多少 东莞打印机维修怎么选好 东莞品牌复印机维修价格 javascript: 怎么通过代码在textarea中加<br> Node.js中的进程和线程 排骨汤吃多了会长胖吗 常喝排骨汤会发胖吗? 忘了多久没牵你的手睡你睡过的枕头是什么歌曲 喝排骨汤会不会长胖 奥维互动地图破解版下载V9.3.4? MapGuide介绍 什么地图软件可以加载shp数据 常用的电子商务模式有哪些 π用英文怎么读? 什么是理财产品净值 什么是理财产品的净值 民法典规定认购协议书有法律效力吗 认购协议书的效力是什么? 故意伤害重伤可否和解? 故意伤害私下和解如何处理? 故意伤害罪双方和解不处罚吗? 下列数最大的是什么意思? 377什么意思 苹果教育优惠怎么操作线下