Node是一个基于Chrome V8引擎的JavaScript代码运行环境。javascript
运行环境css
官网:https://nodejs.org/en/html
失败缘由:系统账户权限不足。前端
解决办法:java
1.以管理员身份运行powershell命令行工具node
2.输入运行安装包命令 msiexec /package node
安装包位置jquery
失败缘由:Node安装目录写入环境变量失败git
解决办法:将Node安装目录添加到环境变量中程序员
PATH环境变量es6
存储系统中的目录,在命令行中执行命令的时候系统会自动去这些目录中查找命令的位置。
全部ECMAScript语法在Node环境中均可以使用。
在Node环境下执行代码,使用Node命令执行后缀为,js的文件便可
在浏览器中全局对象是window,在Node中全局对象是global。
Node中全局对象下有如下方法,能够在任何地方使用,globa能够省略。
JavaScript在使用时存在两大问题,文件依赖和命名冲突。
一个功能就是一个模块, 多个模块能够组成完整应用,抽离一个模块不会影响其余功能的运行。
// a.js // 在模块内部定义变量 let version = 1.0; // 在模块内部定义方法 const sayHi = name => `您好, ${name}`; // 向模块外部导出数据 exports.version = version; exports.sayHi = sayHi;
// b.js // 在b.js模块中导入模块a let a = require('./b.js'); // 输出b模块中的version变量 console.log(a.version); // 调用b模块中的sayHi方法 并输出其返回值 console.log(a.sayHi('黑马讲师'));
说明:导入模块时后缀能够省略
module.exports.version = version; module.exports.sayHi = sayHi;
exports是module.exports的别名(地址引用关系),导出对象最终以module.exports为准
Node运行环境提供的API.由于这些API都是以模块化的方式进行开发的,因此咱们又称Node运行环境提供的API为系统模块
f: file文件, s: system系统,文件操做系统。
fs.readFile('文件路径/文件名称'[,'文件编码'], callback);
fs.writeFile('文件路径/文件名称', '数据', callback);
const content = '<h3>正在使用fs.writeFile写入文件内容</h3>'; fs.writeFile('../index.html', content, err => { if (err != null) { console.log(err); return; } console.log('文件写入成功'); });
path.join('路径', '路径', ...)
// 导入path模块 const path = require('path'); // 路径拼接 let finialPath = path.join('itcast', 'a', 'b', 'c.css'); // 输出结果 itcast\a\b\c.css console.log(finialPath);
别人写好的、具备特定功能的、咱们能直接使用的模块即第三方模块,因为第三方模块一般都是由多个文件组成而且被放置在一个文件夹中, 因此又名包。
第三方模块有两种存在形式:
http://www.javashuo.com/tag/npmjs.com:第三方模块的存储和分发仓库
npm (node package manager) : node的第三方模块管理工具
- 下载:
npm install 模块名称
- 卸载:
npm unintall package模块名称
全局安装与本地安装
做用:解析表单,支持get请求参数,post请求参数、 文件上传。
nodemon是一个命令行工具,用以辅助项目开发。
在Node.js中,每次修改文件都要在命令行工具中从新执行该文件,很是繁琐。
使用步骤
npm install nodemon -g
下载它nrm ( npm registry manager ):npm下载地址切换工具
npm默认的下载地址在国外,国内下载速度慢
使用步骤
基于node平台开发的前端构建工具
将机械化操做编写成任务, 想要执行机械化操做时执行一个命令行命令任务就能自动执行了
用机器代替手工,提升开发效率。
使用npm install gulp
下载gulp库文件
在项目根目录下创建gulpfile.js文件
重构项目的文件夹结构 src目录放置源代码文件 dist目录放置构建后文件
在gulpfile.js文件中编写任务.
在命令行工具中执行gulp任务
例如:
const gulp = require('gulp'); // 使用gulp.task()方法创建任务 gulp.task('first', () => { // 获取要处理的文件 gulp.src('./src/css/base.css') // 将处理后的文件输出到dist目录 .pipe(gulp.dest('./dist/css')); });
注意:处理文件必须放在pipe里面
gulp提供的命令行工具,用于执行项目里gulp的task任务
安装:npm install gulp-cli -g
在命令行使用:gulp first
说明:
安装方法:npm install 插件名字
安装 gulp-htmlmin 与 gulp-file-include 插件
npm install gulp-htmlmin npm install gulp-file-include
gulpfile.js代码:
//引入gulp模块 const gulp = require('gulp'); const htmlmin = require('gulp-htmlmin'); const fileinclude = require('gulp-file-include'); //html任务 //1.压缩html文件 //2.抽取html的公共代码 gulp.task('minify', () => { gulp.src('./src/*.html') //抽取公共代码 .pipe(fileinclude()) //压缩代码 .pipe(htmlmin({ collapseWhitespace: true })) .pipe(gulp.dest('dist')); });
在src源码须要引入的html文件添加:
@@include('./common/header.html')
添加上面代码,fileinclude会指定将指定路径文件的内容注入进去
命令行执行任务:
gulp minify
安装 gulp-less 与 gulp-csso 插件
npm install gulp-less npm install gulp-csso
gulpfile.js代码:
//引入gulp模块 const gulp = require('gulp'); const less = require('gulp-less'); const csso = require('gulp-csso'); //css任务 //1.less语法转换 //2.压缩css代码 gulp.task('cssmin', () => { gulp.src(['./src/css/*.less','./src/css/*.css']) //less语法转换 .pipe(less()) //压缩css代码 .pipe(csso()) .pipe(gulp.dest('dist/css')); });
命令行执行任务:
gulp cssmin
安装 gulp-babel 与 gulp-uglify 插件
gulp-babel 后面两个是他的依赖
npm install gulp-babel @babel/core @babel/preset-env npm install gulp-uglify
gulpfile.js代码:
//引入gulp模块 const gulp = require('gulp'); const babel = require('gulp-babel'); const uglify = require('gulp-uglify'); // js任务 // 1.es6代码转换 // 2.代码压缩 gulp.task('jsmin', () => { gulp.src('./src/js/*.js') .pipe(babel({ // 它能够判断当前代码的运行环境 将代码转换为当前运行环境所支持的代码 presets: ['@babel/env'] })) .pipe(uglify())//压缩代码 .pipe(gulp.dest('dist/js')); });
命令行执行任务:
gulp jsmin
- 上面的代码只是将基本文件整合,还须要将images等文件夹拷贝到dist
- 上面的任务是分别编写的,也须要分别执行,将全部整合所有运行
// 复制文件夹 gulp.task('copy', () => { gulp.src('./src/images/*') .pipe(gulp.dest('dist/images')); gulp.src('./src/lib/*') .pipe(gulp.dest('dist/lib')) }); // 构建任务 //v3版本的写法 // gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']); //v4版本的写法 gulp.task('default', gulp.parallel('htmlmin', 'cssmin', 'jsmin', 'copy'));
说明:
gulp v4版本的gulp.task不支持第二参数为数组的传递,只能使用series或者paralle
- gulp.series:按照顺序执行
- gulp.paralle:能够并行计算
命令行执行任务:
gulp default
也能够不写default,默认是default
文件夹以及文件过多过碎,当咱们将项目总体拷贝给别人的时候,,传输速度会很慢很慢.
复杂的模块依赖关系须要被记录,确保模块的版本和当前保持一致,不然会致使当前项目运行报错
项目描述文件,记录了当前项目信息,例如项目名称、版本、做者、github地址、当前项目依赖了哪些第三方模块等。
使用npm init -y命令生成,加 -y 是默认选项
生成以下:
{ "name": "gulp-demo",//项目名字 "version": "1.0.0",//版本 "description": "",//描述 "main": "gulpfile.js",//运行主入口文件 "dependencies": {},//项目依赖 "devDependencies": {},//开发依赖 "scripts": {//命令的别名 "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [],//关键字描述当前项目 "author": "",//做者 "license": "ISC"//项目遵循的协议,默认ISC:开放源代码的协议 }
{ "dependencies": { "jquery": "^3.3.1“ } }
{ "devDependencies": { "gulp": "^4.0.2", } }
锁定包的版本,确保再次下载时不会由于包版本不一样而产生问题
加快下载速度,由于该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,从新安装时只需下载便可,不须要作额外的工做
在项目的根路径下使用以下命令:
开发环境:npm install
生产环境:npm install --production
生产环境不下载开发依赖(devDependencies)
当命令过长时可使用自定义别名,格式:
npm run 别名
例:npm run test
require('./find.js');
require('./find');
require方法根据模块路径查找模块,若是是完整路径,直接引入模块。
若是模块后缀省略,先找同名JS文件再找同名JS文件夹
若是找到了同名文件夹,找文件夹中的index.js
若是文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件
若是找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到
require('find');
Node.js会假设它是系统模块
Node.js会去node_modules文件夹中
首先看是否有该名字的JS文件
再看是否有该名字的文件夹
若是是文件夹看里面是否有index.js
若是没有index.js查看该文件夹中的package.json中的main选项肯定模块入口文件
不然找不到报错