• 前端工程之node基础


    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还可以是一门编程语言和程序。

  • 相关阅读:
    4-12日 面向对象的组合和继承
    4-8日 递归和二分查找
    4-11 对象的交互 命名空间作用域
    [LeetCode]-algorithms-Reverse Integer
    [LeetCode]-algorithms-Longest Palindromic Substring
    [LeetCode]-algorithms-Median of Two Sorted Arrays
    [LeetCode]-algorithms-Longest Substring Without Repeating Characters
    [LeetCode]-algorithms-Add Two Numbers
    Java中创建String的两种方式
    Java中String为什么是不可变的
  • 原文地址:https://www.cnblogs.com/kevin2chen/p/6635699.html
Copyright © 2020-2023  润新知