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

Nodejs定义了一个构造函数 Module,所有的模块(Node中一个文件即一个模块)都是 Module 的实例。每个模块都隐式传入了构造函数中的如下属性:

function Module(id, parent) {
this.id = id;
this.exports = {};
this.parent = parent;
this.filename = null;
this.loaded = false;
this.children = [];
}

也就是说每一个Node的文件,都会自动创建一个module对象,module对象有一个exports的属性,初始化的值是 {}。
  module.exports = {};
为了方便地导出功能函数,Nodejs还为每个模块定义了变量exports,指向module.exports,是对上述空对象的引用。
模块导出的时候,真正导出的是module.exports,不是exports,require()方法返回的也是 module.exports的值。如果没有显式的给Module.exports设置任何属性和方法,那么给exports的设置其实就是给module.exports的设置。如果module.exports 指向新的js对象时,exports指向的仍然是原来的对象,会导致exports对应的内容不能输出。

module.exports = 'real content';
exports.sayHello= function() { //被覆盖,不能导出
console.log('Hello World');
};

一个模块中的JS代码仅在模块第一次被require时初始化,之后导出对象将被缓存以便重复利用。

 Node.js 中全局对象global的属性:

__filename:表示当前正在执行的脚本的文件名。
__dirname :表示当前正在执行的脚本的绝对路径,从盘符开始,没有trailing separator

fs.read和 fs.write (fd, buffer, offset, length[, position], callback)比较底层,需要借助fs.open(path, flags[, mode], fn(err,fd){…})的fd才能使用,比较麻烦。实际一般直接使用 fs.readFile(), fs.writeFile()和fs.appendFile()。

fs.read和 fs.write (fd, buffer, offset, length[, position], callback)比较底层,需要借助fs.open(path, flags[, mode], fn(err,fd){…})的fd才能使用,比较麻烦。一般直接使用 fs.readFile(), fs.writeFile()和fs.appendFile()。

fd(file descriptors): 打开现存文件或新建文件时,内核会返回一个文件描述符,文件描述符是非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。 内核利用文件描述符(file descriptor)来访问正确的文件。标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2,下一个就是3,所以node中fd的值为3。

Path 模块: 提供了一些用于处理文件路径的方法。
path.resolve([from ...], to):将传入的相对路径参数转为从盘符开始的绝对路径。如果参数有’/’开头,前面的参数会被忽略,返回值不以’/’结尾。

  path.resolve('/foo/bar', './baz')    // 'D:/foo/bar/baz'
  path.resolve('/foo/bar', '/tmp/file/') // 'D:/tmp/file'

path.normalize():将非标准路径的字符串转化成当前系统的标准路径字符串。可作如下处理:
  1、解析路径中的".."和"."字符串;
  2、根据当前操作系统将路径字符串中的路径分隔符做相应的转换(window用反斜杠,*nix用正斜杠)
  3、如果路径字符串中以斜杠结尾(trailing separators),则保留。
  4、空字符串,返回’.’,代表当前工作的目录。

path.normalize('C:\\temp\\\\foo\\bar\\..\\');  //on Windows,Returns: 'C:\\temp\\foo\\'
path.normalize(__dirname + './js/OlapDown/saledownload.js')
//会得到错误路径,因为__dirname的末尾没有路径分隔符,导致后面的./无法解析。

js文件中的#!/usr/bin/env node

#!称Hashbang,操作系统的程序载入器会分析 Shebang 后的内容,将这些内容作为解释器的绝对路径,并将载有 Shebang 的文件路径作为该解释器的参数,调用该解析器。
因为 Node 安装可能会在 /usr/local/bin/ 而不是 /usr/bin/ ,所以需要env 参数。
env:显示当前用户的环境变量。

Cmd命令行调用node main.js –arg1 –arg2:
在main.js中,process.argv的第一个参数是node.exe的路径,第二个参数是main.js的路径,随后才是命令行传入的参数。

操作系统分内核和Shell(外壳)两部分。其中,Shell位于操作系统的外层,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。在windows系统中见到的桌面即explorer.exe是图形shell,而cmd就是命令行shell。不同的操作系统有不同的shell,linux有Bourne Again shell(bash),windows有cmd和powerShell。Shell不仅仅是内核和用户之间的桥梁,shell还可以是一门编程语言和程序。

前端工程之node基础的更多相关文章

  1. 前端工程之npm

    package.json是npm package的配置文件,存储当前项目相关的信息.如果下载npm中的包,包内会自带该文件.具体有如下属性: { "name" : "un ...

  2. 前端工程之CDN部署

    之前发的一篇文章<变态的静态资源缓存与更新>中提到了静态资源和页面部署之间的时间间隙问题,这个问题会迫使前端静态资源发布必须采用非覆盖式. 那篇文章中没有详细解释为什么会产生不可忍受的时间 ...

  3. 零基础学习前端1-1配置node及npm环境变量

    零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ ...

  4. node基础篇二:模块、路由、全局变量课堂(持续)

    今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...

  5. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  6. 我的前端之旅--SeaJs基础和spm编译工具运用[图文]

    标签:seajs   nodejs   npm   spm   js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...

  7. [转]前端利器:SASS基础与Compass入门

    [转]前端利器:SASS基础与Compass入门 SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让 ...

  8. 前端必备之Node+mysql+ejs模版如何写接口

    前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...

  9. node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...

随机推荐

  1. 4.在浏览器中解析XML

    要在浏览器中解析获取XML数据,一般只需经过两个步骤:第一,将XML文档.XML字符串转化成XMLDoc对象.第二,使用JS操作XMLDoc对象. 3.1 将XML文档或XML字符串转化成XMLDoc ...

  2. JSP自定义不带属性和标签体的简单标签

    1. 新建HelloTag类 2. 添加额外的Jar包 (1). 右键项目 -> Build Path -> Configure Build Path -> Libraries -& ...

  3. 子div块中设置margin-top时影响父div块位置的解决办法

    在css中设置样式时,通常会遇到用子div块margin中设置margin-top时,父div块中就会随着子div的margin-top,也会和子div执行相同的margin-top的位置样式 解决办 ...

  4. .NET Core 2.0及.NET Standard 2.0

    .NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q ...

  5. Java容器的各种总结

    Java容器指的是List,Set,Map这些类.由于翻译的问题,问到集合,Collection这些指的都是它们几个. List ArrayList 随机访问快 LinkedList 插入删除快 这个 ...

  6. Linux-进程描述(3)之进程状态僵尸进程与孤儿进程

    进程状态 进程状态反映进程执行过程的变化.这些状态随着进程的执行和外界条件的变化而转换.为了弄明正正在运行的进程是什么意思,我们需要知道进程的不同状态.一个进程可以有多个状态(在Linux内核中,进程 ...

  7. 获取camera截屏图片

    Camera camera; SpriteRenderer sprRender; Texture2D t2d = New Texture2D(1300, 760, TextureFormat.RGB2 ...

  8. Python实现二叉树的四种遍历

    对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力.递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以 ...

  9. 【从无到有】JavaScript新手教程——1.简介、变量和运算符

    今天带大家来学习一下在网页制作过程中很常用的JavaScript(简称JS).   一.JS的作用: 表单验证,减轻服务端的压力 添加页面动画效果 动态更改页面内容 Ajax网络请求 二.[使用JS的 ...

  10. Asp.net core WebApi 使用Swagger生成帮助页

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...