1.Node.js 入门
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
1.1 Node.js 安装
安装无脑下一步即可。然后打开vscode
前端开发工具vscode的插件按照和简单使用
打开命令行终端:Ctrl + Shift + y
进入到程序所在的目录,终端
输入 node -v
证明安装完成。
js通常是纠结的是要不要加分号; 因为之前java都是加分号的,这里js因为换行就不需要加了,所以今天的js都不加分号,当然你的java习惯改不过来也可以加上,良好的编码习惯可以避免很多错误
1.2 快速入门
新建文件夹,然后新建test.js
console.log('Hello Node.js')
打开命令行终端:Ctrl + Shift + y
输入 node test.js
1.3服务器端应用开发
const http = require('http')
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'})
// 发送响应数据 "Hello World"
response.end('Hello Server')
}).listen(8888)
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/')
一样运行 node test.js
访问 http://127.0.0.1:8888/
停止服务:ctrl + c
如果想开发更复杂的基于Node.js的应用程序后台,需要进一步学习Node.js的Web开发相关框架
express,art-template等
2.ES6入门
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
新建html
<!--DOCTYPE:告诉浏览器使用什么规范(默认是html)-->
<!DOCTYPE html>
<!--语言 zh中文 en英文-->
<html lang="en">
<!--head标签代表网页头部-->
<head>
<!--meta 描述性标签,表示用来描述网站的一些信息-->
<!--一般用来做SEO(搜索)-->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--网站标题-->
<title>Document</title>
<script src="../js/es6.js"></script>
</head>
<body>
</body>
</html>
在js下面新建es6.js
2.1 let声明变量
之前我们所有的变量都是var变量,所类型语言会造成一些问题,不够严谨。
// var 声明的变量没有局部作用域
// let 声明的变量 有局部作用域
{
var a = 0
let b = 1
}
console.log(a) // 0
console.log(b) // ReferenceError: b is not defined
上面var就会通过,而let会报错,解决数据穿透的问题。
// var 可以声明多次
// let 只能声明一次
var a = 1
var a =2
let b =1
let b = 2 //报错
以上var可以通过,let会报错
// var 会变量提升
// let 不会变量提升
console.log(a)
var a = 0;
console.log(b)
let b = 0;
上面var是undefined 可以正常运行
let控制台就会报错
2.2 const声明常量
const PI = Math.PI;
PI = 1; // Assignment to constant variable.
上面声明的常量改变就会报错,var就没得这个
2.3 解构赋值
解构赋值是对赋值运算符的扩展
//传统的赋值
let a =1
let b =2
let c = 3
// 解构赋值
let [x,y,z] = [4,5,6]
//传统的赋值
let user = {name: '张三', age: 18}
let name1 = user.name
let age1 = user.age
// 解构赋值
let {name,age} = user
注意 let {name,age}必须和user属性相同
2.4 模板字符串
//传统的赋值
let name = "张三"
let age = 10
let str = "我叫" + name + "今年" + age
// 解构赋值
let str2 = `我叫 ${name} 今年 ${age}`
console.log(str2)
注意这用的不是单引号也不是双引号,是反引号 `
2.5 声明对象简写
const name = "张三"
const age = 18
//传统的赋值
let user = {name:name,age:age}
// 声明对象简写
let user2 = {name,age}
2.6 箭头函数
//传统
var f1 = function(a,b){
return a + b
}
// es6
var f2 = (a,b) => a + b
3. NPM包管理器
NPM全称Node Package Manager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也是Node.js的包管理工具,相当于前端的Maven。
安装完node.js就可以查看 npm版本
3.1 初始化
新建npm文件夹
在命令行进入文件夹
npm init
{
"name": "npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
一路下一步,最终得到一个json,也可以写入规定的命名
#name: 项目名称
#version: 项目版本号
#description: 项目描述
#keywords: {Array}关键词,便于用户搜索到我们的项目
#最后会生成package.json文件,这个是包的配置文件,相当于maven的pom.xml
npm init -y
直接生成,全部默认。
3.2 修改npm镜像
NPM官方的管理的包都是从 http://npmjs.com下载的,但是这个网站在国内速度很慢。
这里推荐使用淘宝 NPM 镜像 http://npm.taobao.org/
#经过下面的配置,以后所有的 npm install 都会经过淘宝的镜像地址下载
npm config set registry https://registry.npm.taobao.org
#查看npm配置信息
npm config list 123
3.3 npm install
#使用 npm install 安装依赖包的最新版,
#模块安装的位置:项目目录\node_modules
#安装会自动在项目目录下添加 package-lock.json文件,这个文件帮助锁定安装包的版本
#同时package.json 文件中,依赖包会被添加到dependencies节点下,类似maven中的
npm install jquery
npm install jquery@2.1.x
#更新包(更新到最新版本)
npm update 包名
#全局更新
npm update -g 包名
#卸载包
npm uninstall 包名
#全局卸载
npm uninstall -g 包名
4.Babel
ES6的某些高级语法在浏览器环境甚至是Node.js环境中无法执行。
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行执行
安装
npm install -g babel-cli
检查是否安装完成
babel --version
4.1Babel 实战
新建babel文件夹
在babel目录下执行
npm init -y
新建文件夹src,新建example.js
// 转码前
// 定义数据
let input = [1, 2, 3] // 将数组的每个元素 +1
input = input.map(item => item + 1)
console.log(input)
写一些es6的语法
配置 .babelrc
在src同层目录新建 .babelrc
{
"presets": ["es2015"],
"plugins": []
}
安装转码器,在项目中安装
npm install --save-dev babel-preset-es2015
然后转码
mkdir dist
babel src/example.js --out-file dist/compiled.js
生成的文件已经转换成var了
5. 模块化
5.1 CommonJS规范
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
新建js
mokuai-common.js
// 定义成员:
const sum = function (a, b) {
return a + b
}
const subtract = function (a, b) {
return a - b
}
const multiply = function (a, b) {
return a * b
}
const divide = function (a, b) {
return a / b
}
// module.exports =
// {
// sum: sum,
// subtract: subtract,
// multiply: multiply,
// divide: divide
// }
//简写
module.exports =
{
sum,
subtract,
multiply,
divide
}
在原来的同目录js测试
//引入模块,注意:当前路径必须写 ./
const m = require('./mokuai-common.js')
console.log(m)
const r1 = m.sum(1,2)
const r2 = m.subtract(1,2)
console.log(r1,r2)
控制台运行
5.2 ES6模块化规范
后面vue用的更多的是es6规范
新建 userApi.js
export function getList(){
console.log("获取数据列表")
}
export function save(){
console.log("保存数据")
}
调用
import {getList,save} from './userApi'
getList()
save()
当然这个时候无法直接运行,因为是es6的语法
需要Batel
6.Webpack
Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
6.1 安装
npm install -g webpack webpack-cli
安装完成查看版本 确定是否完成
webpack -v
6.2 打包js
先运行
npm init -y
新建src目录,新建common.js,utils.js,main.js
common.js
exports.info = function (str) {
document.write(str);
}
utils.js
exports.add = function (a, b) {
return a + b;
}
main.js
const common = require('./common');
const utils = require('./utils');
common.info('Hello world!' + utils.add(100, 200));
webpack目录下 新建 webpack.config.js
const path = require("path");//Node.js内置模块
module.exports = {
entry: './src/main.js',//配置入口
output: {
path: path.resolve(__dirname, './dist'),//输出路径,__dirname:当前文件 所在路径
filename: 'bundle.js'//输出文件
}
}
在webpack下运行
webpack --mode=development
这样就生成打包后的js
可以用另外一种方式打包,打包packge.json新新增
"dev": "webpack --mode=development"
然后运行
npm run dev
结果相同
6.3 Css打包
6.3.1 安装style-loader和 css-loader
Webpack 本身只能打包js,对于css需要额外的安装插件
npm install --save-dev style-loader css-loader
安装完成,我的packge.json会有引入
6.3.2 修改webpack.config.js
修改后的js
const path = require("path");//Node.js内置模块
module.exports = {
entry: './src/main.js',//配置入口
output: {
path: path.resolve(__dirname, './dist'),//输出路径,__dirname:当前文件 所在路径
filename: 'bundle.js'//输出文件
},
module: {
rules: [{
test: /\.css$/, //打包规则应用到以css结尾的文件上
use: ['style-loader', 'css-loader']
}]
}
}
6.3.3 测试
在src下新增style.css
body {
background: pink;
}
在main.js第一行引入
require('./style.css');
运行
npm run dev
然后新生成dist下的js就包含js和css合并加密
总结 对于web运行我们还是用var吧,就不用转码了 ,对于app小程序可以采用es6