Node.js介绍
Node.js,一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
Node.js,使用非阻塞的,事件驱动的I/O操作来保持在处理跨平台 (across distributed devices) 数据密集型实时应用时的轻巧高效。简单地说,Node.js就是运行在服务端的JavaScript。安装略过。
NPM(Node package Manager)
Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的,也是Node.js的包管理工具,相当于前端的 Maven ( Java )。安装略过。
NPM官方管理的包下载:,配置成淘宝NPM镜像:,速度提升。
经过下面的配置,所有的npm install都会经过淘宝的镜像地址去下载:
查看npm配置信息:
npm config list
npm安装命令(npm install命令):
#使用 npm install 安装依赖包的最新版,模块安装的位置:项目目录node_modules | |
#安装会自动在项目目录下添加 package-lock. json 文件,这个文件帮助锁定安装包的版本的 | |
#同时package.json文件中,依赖包会被添加到dependencies节点下,类似java中maven的<dependencies> | |
npm install jquery | |
#npm管理的项目在备份和传输的时候一般不携带node_modules文件夹 | |
#根据package.json中的配置下载依赖,初始化项目 | |
npm install | |
#如果安装时指定特定版本 | |
npm install jquery@.1.x | |
#devDependencies节点:开发时的依赖包,项目打包到生产环境的时候不包含的依赖 | |
#使用 -D参数将依赖添加到devDependencies节点 | |
npm install --save-dev eslint | |
#或 | |
npm install -D eslint | |
#全局安装 | |
#Node.js全局安装的npm包和工具的位置:用户目录AppDataRoamingnpmnode_modules | |
#一些命令行工具常使用全局安装的方式 | |
npm install -g webpack |
npm其它命令
#更新包(更新到最新版本) | |
npm update 包名 | |
#全局更新 | |
npm update -g 包名 | |
#卸载包 | |
npm uninstall 包名 | |
#全局卸载 | |
npm uninstall -g 包名 |
Babel转码器
Babel,一个工具链,主要用于将ES6(ECMAScript 2015)+版本的代码转换为向后兼容的 JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中。
Babel的安装:
npm install –global babel-cli
查看版本(是否安装成功):
babel –version
Babel的使用案例:
1、初始化项目:
npm init -y
2、创建文件(src/demo.js)
let input = [, 2, 3] | |
input = input.map(item => item +) | |
console.log(input) |
3、配置.babelrc(项目根新建文件:.babelrc)
# 文件的格式: | |
{ | |
"presets": [], | |
"plugins": [] | |
} | |
# 这里配置,presets字段设定转码规则,将es规则加入 .babelrc | |
{ | |
"presets": [ | |
"es" | |
], | |
"plugins": [] | |
} |
4、安装转码器(在项目中安装)
npm install –save-dev babel-preset-es2015
5、执行转码
# 转码结果写入一个文件 | |
mkdir dist | |
# --out-file 或 -o 参数指定输出文件 | |
babel src/demo.js --out-file dist/compiled.js | |
# 或者 | |
babel src/demo.js -o dist/compiled2.js | |
# 整个目录转码 | |
mkdir dist | |
# --out-dir 或 -d 参数指定输出目录 | |
babel src --out-dir dist | |
# 或者 | |
babel src -d dist |
这里执行:babel src -d dist
6、网页测试(项目根目录新建demo.html)
<script src="dist/demo.js"></script>
模块化
Javascript模块化编程,已经成为一个迫切的需求,理想情况下,开发者只需要实现核心的业务逻辑,其它都可以加载已经写好的模块。Javascript不是一种模块化编程语言,不支持”类”(class),包(package),”模块”(module)等概念。
模块化规范:CommonJS模块化规范和ES6模块化规范。
CommonJS模块规范
CommonJS中使用exports和require来导出、导入模块。
1、工程中创建文件(src/module/common.js)
// 定义成员: | |
const sum = function (a, b) { | |
return parseInt(a) + parseInt(b) | |
} | |
const subtract = function (a, b) { | |
return parseInt(a) - parseInt(b) | |
} | |
const multiply = function (a, b) { | |
return parseInt(a) * parseInt(b) | |
} | |
const divide = function (a, b) { | |
return parseInt(a) / parseInt(b) | |
} | |
// 导出成员 | |
module.exports = { | |
sum: sum, | |
subtract: subtract, | |
multiply: multiply, | |
divide: divide | |
} |
2、工程中创建文件(src/demo.js)
//引入模块,注意:当前路径必须写 ./ .js可以不写 | |
const m = require('./module/common.js') | |
console.log(m) | |
const result = m1.sum(1, 2) | |
const result = m1.subtract(1, 2) | |
console.log(result, result2) |
3、运行
node src/demo.js
ES6模块化规范
ES6使用export和 import 来导出、导入模块。
1、工程中创建文件(src/module/userApi.js)
export function getList() { | |
console.log('获取用户数据列表') | |
} | |
export function save() { | |
console.log('保存用户数据') | |
} |
2、工程中创建文件(src/demo.js)
//只取需要的方法即可,多个方法用逗号分隔 | |
import { getList, save } from "./module/userApi.js" | |
getList() | |
save() |
3、运行
这时的程序无法运行的,因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。
# 配置已省略 | |
babel src -d dist | |
#执行 | |
node dist/demo.js |
ES6模块化的另一种写法
1、工程中创建文件(src/module/userApi.js)
export default { | |
getList() { | |
console.log('获取用户数据列表') | |
}, | |
save() { | |
console.log('保存用户数据') | |
} | |
} |
2、工程中创建文件(src/demo.js)
3、运行
这时的程序无法运行的,因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。
# 配置已省略 | |
babel src -d dist | |
#执行 | |
node dist/demo.js |
Webpack模块打包器
Webpack是一个前端资源加载/打包工具,模块打包器。主要目标是将JavaScript文件打包在一起,打包后的文件用于在浏览器中使用,基于node 。
官方,一个用于现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部构建一个依赖图(dependency graph),此依赖图对应映射到项目所需的每个模块,并生成一个或多个bundle。
Webpack安装
#全局安装 | |
npm install -g webpack webpack-cli | |
#查看版本号 | |
webpack -v |
JS打包,应用案例
1、工程中创建文件(src/common.js)
exports.info = function (string) { | |
document.write(string); | |
} |
2、工程中创建文件(src/utils.js)
exports.add = function (a, b) { | |
return a + b; | |
} |
3、工程中创建文件(src/main.js)
const common = require('./common'); | |
const utils = require('./utils'); | |
common.info('Hello Webpack! -->' + utils.add(, 20000)); |
4、JS打包,工程中创建文件(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' //输出文件 | |
} | |
} |
5、命令行执行编译命令
#有黄色警告 | |
webpack | |
#没有警告 | |
webpack --mode=development | |
#执行后查看bundle.js里面包含了上面两个js文件的内容并惊醒了代码压缩 |
配置项目的npm运行命令执行,配置package.json文件,scripts中添加,如下:
"scripts": { | |
"test": "echo "Error: no test specified" && exit", | |
"dev": "webpack --mode=development" | |
} |
运行命令:
npm run dev
6、验证,工程中创建文件(index.html)
<body> | |
<script src="dist/bundle.js"></script> | |
</body> |
浏览器中参看,输出内容: Hello Webpack! –>30000
css 打包,应用案例
1、安装style-loader和 css-loader
Webpack本身只能处理JavaScript模块,如果要处理其他类型的文件,就需要使用loader进行转换。Loader可以理解为是模块和资源的转换器。
css-loader是将css装载到javascript;style-loader是让javascript认识css;
npm install –save-dev style-loader css-loader
2、修改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' //输出文件 | |
}, | |
module: { | |
rules: [ | |
{ | |
test: /.css$/, //打包规则应用到以css结尾的文件上 | |
use: ['style-loader', 'css-loader'] | |
} | |
] | |
} | |
} |
3、工程中创建文件(src/style.css)
body{ | |
background:rgb(, 243, 129); | |
} |
4、工程中修改文件(src/main.js)
const common = require('./common'); | |
const utils = require('./utils'); | |
common.info('Hello Webpack! -->' + utils.add(, 20000)); | |
require('./style.css'); |
5、运行命令
npm run dev
6、验证,工程中创建文件(index.html)
<body> | |
<script src="dist/bundle.js"></script> | |
</body> |
7、效果