写点什么

JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】

作者:黎燃
  • 2022-11-28
    内蒙古
  • 本文字数:2174 字

    阅读完需:约 7 分钟

JXcore 打包


node.Js 是面向服务器端和网络应用程序的开源跨平台运行环境。JXcore 是一个支持多线程的节点。对于 js 发行版,您可以在多个线程中安全运行,而无需对现有代码进行任何更改。安装命令如下:



$ curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | bash
复制代码


包含以下文件:


drwxr-xr-x  2 root root  4096 Nov 13 12:42 images-rwxr-xr-x  1 root root 30457 Mar  6 12:19 index.htm-rwxr-xr-x  1 root root 30452 Mar  1 12:54 index.jsdrwxr-xr-x 23 root root  4096 Jan 15 03:48 node_modulesdrwxr-xr-x  2 root root  4096 Mar 21 06:10 scriptsdrwxr-xr-x  2 root root  4096 Feb 15 11:56 style
复制代码


载入:使用 JXcore 编译后,我们可以使用以下命令执行生成的 jx 二进制文件:


$ node index.js command_line_arguments
复制代码

模块系统

node.js 文件相互调用,Node.js 提供了一个简单的模块系统。模块是一个节点。js 应用程序的基本组件、文件和模块是一对一的。换句话说,节点 js 文件是一个模块,可以是 JavaScript 代码、JSON 或编译的 C/C++扩展。


exports.world = function() {  console.log('Hello World');}
复制代码


helloJs 通过 exports 对象将世界作为模块的访问接口 Js 通过 require('./hello')加载模块,然后可以直接访问 Js 中 exports 对象的成员函数 hello。有时我们只想将一个对象封装成以下格式的模块:


//hello.js function Hello() {     var name;     this.setName = function(thyName) {         name = thyName;     };     this.sayHello = function() {         console.log('Hello ' + name);     }; }; module.exports = Hello;
复制代码


这样就可以直接获得这个对象了:


//main.js var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello(); 
复制代码


模块接口中唯一的变化是使用模块 Exports=Hello 替换 exportsworld=function(){}当外部引用此模块时,其接口对象是要输出的 Hello 对象本身,而不是原始导出。


var http = require("http");
...
http.createServer(...);
复制代码


node.Js 附带一个名为 http 的模块。我们在代码中请求它,并将返回值分配给一个局部变量。这将我们的局部变量转换为一个对象,该对象包含 http 模块提供的所有公共方法。node.Js 的 require 方法中的文件搜索策略如下:因为节点 js 中有四种类型的模块(原生模块和三个文件模块)。尽管 require 方法非常简单,但内部加载非常复杂,并且它们的加载优先级不同。


LOAD_AS_DIRECTORY(X)1. 如果 X/package.json 是一个文件,   a. 解析 X/package.json, 并查找 "main" 字段。   b. let M = X + (json main 字段)   c. LOAD_AS_FILE(M)   d. LOAD_INDEX(M)2. LOAD_INDEX(X)
LOAD_NODE_MODULES(X, START)1. let DIRS=NODE_MODULES_PATHS(START)2. for each DIR in DIRS: a. LOAD_AS_FILE(DIR/X) b. LOAD_AS_DIRECTORY(DIR/X)
NODE_MODULES_PATHS(START)1. let PARTS = path split(START)2. let I = count of PARTS - 13. let DIRS = []4. while I >= 0, a. if PARTS[I] = "node_modules" CONTINUE b. DIR = path join(PARTS[0 .. I] + "node_modules") c. DIRS = DIRS + DIR d. let I = I - 15. return DIRS
复制代码

net

在 UNIX 上,本地域也称为 UNIX 域。参数路径是文件系统路径名。它从 sizeof(sockaddr_un.sun_path)-1 被截断,其长度从 91 到 107 字节不等,具体取决于操作系统。Linux 上的典型值为 107,macOS 上为 103。路径受与创建的文件相同的命名约定和权限检查的约束。它将在文件系统中可见,并将持续到取消链接时。在 Windows 上,本地域通过命名管道实现。路径必须是?\Pipe 或\Pipe 是入口。路径允许任何字符,但以下字符可能会对管道名称进行某些处理,例如解析..Sequence。但是,管道空间是平坦的。管道不会持续,并且在关闭最后一个参照时将被删除。不要忘记在转义 JavaScript 字符串时使用双反斜杠来指定路径,


net.createServer().listen(  path.join('\\\\?\\pipe', process.cwd(), 'myctl'));
复制代码


server.address()如果在 IP 套接字上侦听,将返回操作系统报告的绑定 IP 地址、地址系列和服务端口。在查找操作系统分配的地址时,查找指定的端口非常有用。返回具有端口、系列和地址属性的对象:{port:12346,系列:“IPv4”,地址:“127.0.0.1”}对于侦听管道或 UNIX 域套接字的服务器,名称将作为字符串返回


const server = net.createServer((socket) => {  socket.end('goodbye\n');}).on('error', (err) => {  // handle errors here  throw err;});
// grab an arbitrary unused port.server.listen(() => { console.log('opened server on', server.address());});
复制代码


停止服务器以接受和创建新连接并保留现有连接此功能是异步的。当所有连接都关闭并且服务器响应['close'][]事件时,服务器将最终关闭。一旦发生'close',将调用可选的回调函数。与此事件不同,如果服务器在关闭时未打开,则将使用错误作为唯一参数。


server.on('error', (e) => {  if (e.code === 'EADDRINUSE') {    console.log('Address in use, retrying...');    setTimeout(() => {      server.close();      server.listen(PORT, HOST);    }, 1000);  }});
复制代码


所有 listen()方法都可以传入 backlog 参数,以指定要连接的队列的最大长度。

发布于: 刚刚阅读数: 3
用户头像

黎燃

关注

前端工程师 2022-05-06 加入

专注学习分享前端知识。

评论

发布
暂无评论
JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】_前端_黎燃_InfoQ写作社区