当前位置: 首页 > 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防火墙详解(一)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • css的样式优先级
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Js基础——数据类型之Null和Undefined
  • October CMS - 快速入门 9 Images And Galleries
  • PHP变量
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 阿里云Kubernetes容器服务上体验Knative
  • 来,膜拜下android roadmap,强大的执行力
  • 力扣(LeetCode)357
  • 使用agvtool更改app version/build
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 运行时添加log4j2的appender
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 选择阿里云数据库HBase版十大理由
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $L^p$ 调和函数恒为零
  • (function(){})()的分步解析
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)ssm码农论坛 毕业设计 231126
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三分钟)速览传统边缘检测算子
  • (十三)Flask之特殊装饰器详解
  • (转)iOS字体
  • (转)创业的注意事项
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .gitignore
  • .NET 5种线程安全集合
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装