当前位置: 首页 > news >正文

入门到放弃node系列之Hello Word篇

前言

本文首发公众号【一名打字员】

入门到放弃之node系列终于新鲜出炉了,这个系列覆盖了从基础到进阶的基本知识与方向,适合入门的打字员们,系列结束后你可以建立一个自己的网站,写一个自己的服务端应用或者更多。系列中大都是打字员们口口相传的言论,不代表官方观点。

本系列环境 MAC OS 10.12.6,node v8.0,npm 5.0.4.

背景

众所周知Node.js是一个基于V8引擎的JavaScript运行环境,由Ryan Dahl开发。它使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。关于node的详细在这里就不做多的介绍,大家可以在wiki或者在搜索引擎中查看更多详细介绍。

大家只需要知道基于node,可以轻松的写出高性能的WEB服务器,也能够写出提高工作效率的工具,实在是前端人员的福音。

NPM

在进行下一步之前不得不介绍一下npm,node拥有一个强大的生态圈,npm则是全球最大的开源库生态系统。它是一个包管理器,能在代码部署上解决很多问题。
通常我们可以这样使用NPM。

  1. 下载别人开源的第三方包到本地使用。

  2. 将自己编写的包开源供别人使用。

我们可以通过nom install argv来安装node应用中所需要的模块。使用npm init初始化项目。

安装

关于node的安装这里不多费口舌,我们可以进入node的中文官网下载最新版本,然后进行安装。MAC中一般会自带node环境,Linux和Windows下均需要自行下载编译安装。

当我们输入node -v能够打印出node的对应版本信息时,代表已经成功安装node。

HelloWord

是的,令人激动的helloword要开始了,每当我们接触到新的语言时,我们通常写的第一段代码就是HelloWord。我们下载好node之后如何运行呢,我们可以新建一个js文件,在里面写上以下内容:

clipboard.png

运行node helloword.js
clipboard.png

是不是看到了熟悉的Hello Word。
是的,你没有看错,这就是你熟悉的js语法,和你平常写的代码一毛一样,但是你却可以直接使用命令交互模式调试js代码片段。这样无论你是前端写写js特效、flash写脚本效果、untity3D脚本游戏打字员(请允许我这么称呼)或者其它打字员,你都可以方便的使用起来。

基本概念

学习node我们需要掌握以下几个概念:

  1. 模块
    通常我们写的应用程序都会比较大,我们会将其进行模块化,在node中我们可以将代码进行整理,放在不同的文件中,每一个文件就是一个模块,路径名称就是模块名。我们可以使用require来导入其它模块,也可以使用ES2015的语法import。如下所示:

var func1= require('./func');
var func2 = require('./func.js');
var func3 = require('/home/mrpan/func');
var func4 = require('/home/mrpan/func.js');
//当然我们也可以这样引入一个json文件
var data = require('./data.json');

通常我们可以使用export来到出一个模块对象的公有方法和属性,下面我们把刚才的helloword方法导出一下。

exports.sayHello(){
    console.log('Hello World!');
}

通常我们使用module对象可以访问到当前模块的一些相关信息,但它最多的用途是替换当前模块的导出对象。如下所示:

module.exports = function () {
    console.log('Hello World!');
};

2.包
从上面的知识我们大概知道了node里面模块就是一个个的js,然后多个模块则组成了一个包。在一个包的所有子模块中,通常我们需要一个入口模块,入口模块的导出对象被作为包的导出对象。如下图,则是一个标准的node程序模块图:

clipboard.png

其中index.js则是入口文件。另外,当模块的文件名是index.js,加载模块时可以使用模块所在目录的路径代替模块文件路径。如果想自定义入口模块的文件名和存放位置,就需要在包目录下包含一个package.json文件,并在其中指定入口模块的路径。
其内容一般如下:

{
  "name": "helloword",
  "version": "1.0.0",
  "description": "node test",
  "main": "./index.js",
}
  1. 工程目录
    看完上面的童鞋一定已经被绕晕了,完全不知道我们的工程目录结构一般到底是咋样得了。在这里重申一次,一个简单明了的目录,能够帮助开发人员更方便的阅读源码。

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

结语

通过上面的文章,大家应该已经知道了基础的node知识,以及能够编写并执行简单的应用了。接下来希望想学的童鞋们赶紧去恶补一下js的基础语法,下一次我们将会讲述在node中的网络操作。

另外,有童鞋问本猿有没有做过什么应用可以开源出来让大家学习的,在这里贴出两个项目:

  1. FullStack --基于node.js的express模块编写的全干社区
    原本是想做一个社区的,现在暂时用来做个人网站.

  2. webwx-api -- 网页版的微信API(node版)

相关文章:

  • Neither BindingResult nor plain target object f...
  • ios中非ARC项目中引用ARC文件
  • asp.net Mvc Area 找到多个与名为相同的控制器匹配的类型 请通过调用含有“namespaces”参数...
  • MFC连接数据库
  • mina 和 xsocket
  • RHCE 学习笔记(7) 进程管理
  • vSphere基本功能介绍
  • AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(中篇)
  • 【java实现邮件的发送分享】
  • 基于CENTOS搭建Docker环境[QCLOU实验记载]
  • web开发资料
  • 验证码广告:站长增加收入新渠道
  • 在pcDuino上刷了AndDroid,Ubuntu,XBMC
  • Styling FX Buttons with CSS
  • iptables防火墙详解(一)
  • const let
  • ES学习笔记(12)--Symbol
  • Git学习与使用心得(1)—— 初始化
  • jquery cookie
  • js ES6 求数组的交集,并集,还有差集
  • Js基础知识(四) - js运行原理与机制
  • Lsb图片隐写
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Octave 入门
  • PAT A1092
  • Transformer-XL: Unleashing the Potential of Attention Models
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 动态规划入门(以爬楼梯为例)
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 悄悄地说一个bug
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用docker-compose进行多节点部署
  • 项目管理碎碎念系列之一:干系人管理
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • gunicorn工作原理
  • ​第20课 在Android Native开发中加入新的C++类
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #define 用法
  • #FPGA(基础知识)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $.proxy和$.extend
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (39)STM32——FLASH闪存
  • (ros//EnvironmentVariables)ros环境变量
  • (编译到47%失败)to be deleted
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (九十四)函数和二维数组
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)【Hibernate总结系列】使用举例
  • (转)c++ std::pair 与 std::make
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *2 echo、printf、mkdir命令的应用