代码组织和部署

模块的路径解析规则

require支持/或者盘符的绝对路径,也支持./开头的相对地址
同时require也支持第三种写法

内置模块

如果传递给require的函数是node.js的内置模块,将会不做路径解析,直接返回内部exports模块要导出的对象

node_modules目录

node.js定义一个node_modules存放模块,每次使用foo/bar的方式的时候,会先寻找该目录下的node_modules,接着上一层,知道顶层为止

NODE_PATH环境变量

如果设置变量,将会按照变量的地址进行寻找

包是由多个子模块组成的大模块为包,其中所有的子模块都放进同一个目录里

index.js

当模块文件名为index.js的时候,加载模块所在目录的路径代替模块文件路径

package.json

package.json能自定义入口模块的路径、

-/home/user/lib
    `cat/+ doc/- lib/
            head.jsbody.jsmain.js+ tests/package.json

以上为一个目录文件
配置文件内容如下

{"name": "cat";"main": "./lib/main.js";
}

其中定义该包的名称为cat,入口文件为相对路径下的main.js
即,加载该模块的时候路径为

/home/user/lib/cat

node.js会自动根据配置文件找到入口模块所在的位置

命令行程序

为了在任何目录实现

node-echo hello word

windows

需要cmd文件,

需要先将其目录添加到环境变量

在该目录下创建cmd文件

创建cmd文件的目的是能链接执行一个js文件

@node "C:\User\user\bin\node-echo.js" %*

这样就完成了在任何目录下使用

node-echo

命令

工程目录

- /hoem/user/workspace/node-echo/ # 工程目录
    - bin   # 存放命令行相关代码
        node-echo.js+ doc/  # 存放相关文档- lib/  # 存放api相关代码
        cho.js- node_modules/ # 存放第三方包
        + argv/+ tests/    # 存放测试用例package.json    # 元数据文件README.md   # 说明文件

文件内容

/*bin/node-echo*/
var argv = require("argv"),echo = require('../lib/echo');
console.log(echo(argv.join("")));/*lib/echo.js*/
module.exports = function (message) {return message;
};/*package.json*/
{"name": "node-echo","main": "./lib/echo.js",
}

npm

使用npm

require("argv");

因为第三行包在node_modules文件夹下,所以直接加上名称即可使用

包依赖声明

{"name": "node-echo","main": "./lib/echo.js","dependencies": {"argv": "0.0.2",},
};

声明该报依赖argv包的0.0.2版本
下载包时候
直接

npm-install

即可批量安装声明的依赖包
当他人下载的时候,也会自动下载进一步的依赖的第三方包
目录结构如下

- project/
    - node_modules/
        - node-echo/
            - node-modules/
                + argv/

这样就完成了包的问题

安装命令行程序

~ %APPDATA%\npm\    # 在windows系统下- node_modules\+ node-echo\node-echo.cmd

版本号

x,y,z

修复bug时,需要更新z位
增加新功能,并且向下兼容,更新到y为
大变动,不兼容,更新到x位

一些比较有用的npm

npm cache clear # 清空npm本地缓存
npm update -g # 将全局安装的包更新到最新版

小结

写代码前,目录结构规划后
稍微大的程序,使用模块化管理

文件操作

首先

提供了一些文件操作的api

小文件拷贝

var fs = require("fs");var data = fs.readFileSync('input.txt');data = "sdferg" + data.toString();
for(var i = 0; i <= 10; i++){data = data + data;
}fs.writeFileSync('put.txt', data);console.log(data);
console.log("程序执行结束!");

将其保存进内存中,进行操作
随带着解释一下第一句,第一句中的是将其fs模块读取,并保存进入fs对象中

大文件拷贝

如果文件过大,这样保存进入内存拷贝会导致内存溢出,所以一点一点读,边读边写

var fs = require("fs");var txt = fs.createReadStream("input.txt"); // 创建了一个只读数据流
var writeTxt = fs.createWriteStream("out.txt"); //创建了一个写的数据流
txt.pipe(writeTxt);

创建两个流,将其连接,完成文件的读写

一些大致的api

数据块

buffer对二进制数据的操作
类似于C中的指针
slice方法类似C中的对于指针的移动

数据流

stream基于事件工作,这是需要注意的
使用数据流的问题在于会产生读完以后无法处理的情况,通过回调函数,达到通知以后在让生产者进行处理,即消费者每消费一件,生产者进行生产
ps: 回调目前看不懂,异步在下一节中有
这一点过

遍历目录

当要找到并处理制定目录下的所有js文件的时候,需要遍历整个目录

递归算法

遍历目录采用的是递归算法

遍历算法

目录为树状结构,遍历采用深度优先+先序的算法进行遍历吗,到达节点以后,首先接着遍历子节点,而不是邻居节点,
举例

          A/ \B   C/ \   \D   E   F

上方的树,先A > B > D > E > C > F

ps。。我需要数据结构。。有必要折腾一本js的数据结构和算法

同步遍历

先遇到目录,然后接着遇到文件,当遇到文件的时候,暂停遍历,将结果通过回调函数给主程序进行判断,接着判断结果返回,根据判断的结果继续进行遍历

异步遍历

和同步变量完全相同,不过,是边遍历边进行返回,同时主程序也在运行

文本编码

常用的一个是万国码的存储方式utf-8,一个是gbk

bom的问题

bom会标记文件的一些相关信息,下面是一个使用函数,将其bom移出

function readText(pathname) {var bin = fs.readFileSync(pathname);    // 创建一个流 创建一个读取文件的数据流if (bin[0] === 0xEF && bin[1] === 0xBB %% bin[2] === 0xBF) {bin = bin.slice(3);     // 去除bom}return bin.toString('utf-8')    // 以utf-8的格式进行返回
};

GBK转utf-8

GBk某种原因,不在支持范围内部,所以,如果读取,需要将其转换为utf-8
使用这个包iconv-lite进行转换,先使用npm进行下载,完后进行读取,下面编写一个函数进行读取

var iconv = require('iconv-lite');  // 加载相关模块function readGBKText(pathname) {var bin = fs.readFileSync(pathname);    // 创建文件流return iconv.decode(bin, 'gbk');    // 使用iconv模块的decode方法,对bin进行转换
}

单字节编码

因为英文字母没有问题,全是ASCII进行编码和存储的,由于gbk和utf-8的问题的导致,所以呢,储存汉字的二进制依旧不变即可,只变英文字母

小结

path模块进行路径的拼接
fs模块的同步更好用,异步真的能让人崩溃
目录遍历和文件编码的处理

(adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-6086148708175812", enable_page_level_ads: true });

代码组织和部署 文件操作 node.js 1相关推荐

  1. 代码组织和部署 文件操作 node.js

    代码组织和部署 模块的路径解析规则 require支持/或者盘符的绝对路径,也支持./开头的相对地址 同时require也支持第三种写法 内置模块 如果传递给require的函数是node.js的内置 ...

  2. node将当前文件上传到服务器,以编程方式将文件从node.js上传到另一个Web服务器...

    我需要将文件从node.js应用程序推送到其他地方运行的Web服务器,该服务器通过典型的上载机制接受文件.例如,假设接收服务器有一个网页,这样的形式:以编程方式将文件从node.js上传到另一个Web ...

  3. Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...

  4. JavaScript、js文件、Node.js、静态文件

    一.JavaScript 1.JavaScript认知 JavaScript(简称"JS") 是一种解释型的脚本语言.广泛用于Web应用开发,对页面事件做出响应. 通常JavaSc ...

  5. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  6. 开源 静态 文件 服务器,Node.js搭建静态服务器

    写在开头,本文是node.js最最初级的搭建静态服务器,比较适合新手入门,大神请绕道哦- Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用 ...

  7. js处理本地.bin音频文件和node.js的fs模块处理本地.bin音频区别

    1.js处理本地.bin文件 <body><input type="file" name="" id="fileInput" ...

  8. nodec mysql_Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...

  9. 用pm2在本地部署服务器node项目,利用pm2部署多个node.js项目的配置教程

    前言 相信大家应该都知道,一般在实际项目部署中,我们服务器在启动的时候需要自动启动node服务.以前是通过liunx自带的命令启动.但是随着后台微服务越来越多.每次发布新程序.修改脚本太麻烦了.于是换 ...

最新文章

  1. windows2012下一端口多网站 Apache配置
  2. asp.net core mvc上传大文件解决方案
  3. HTML(三):表单元素
  4. 【ZooKeeper Notes 30】ZooKeeper与Diamond有什么不一样
  5. JS 控制RadioButtonList 获得上传文件类型后选中
  6. 计算机系统基础:虚拟存储管理知识笔记
  7. java设计模式之状态模式_Java中的状态设计模式
  8. [jQuery] 谈一下Jquery中的bind(),live(),delegate(),on()的区别?
  9. 【转】ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET
  10. 干货 | 带你理解对比学习损失函数的性质以及温度系数的作用
  11. OCP China Day“登陆”,最新技术、方案吸睛!
  12. nginx——ngx_http_gzip_module
  13. 【CV】计算机视觉入坑必备
  14. Java 又双叒叕发布新版本,这么多版本如何灵活管理?
  15. Python的三种基本数据类型
  16. App Store审核规范
  17. 概率论基础(一):条件均值与全期望公式
  18. 【狂神说:秦疆】SpringMVC笔记
  19. 一键制作所有微信好友头像墙照
  20. 《机器学习基础》学习笔记-1

热门文章

  1. 阿里云前端周刊 - 第 33 期
  2. 如何 Scale Up/Down 应用?- 每天5分钟玩转 Docker 容器技术(126)
  3. java 多态,接口,抽象类的认识
  4. 《设计模式其实很简单》
  5. 搜索引擎的强大意味着与之合作就会双赢?
  6. Java中的weak reference 和 soft reference
  7. poi处理excel导出
  8. 成立出版社的条件_厦门大学出版社招聘启事
  9. linux修正磁盘错误,找到了linux分区顺序错乱修复方法
  10. oracle命中率sql,Oracle 检查命中率的SQL