node开发属于后端开发
Node是一个基于Chrome V8引擎的JavaScript代码运行环境
node -v
查看是否安装成过所有ECMAScript语法在Node环境中都可以使用
在文件所在位置,shift右键打开powershell,输入node接文件名即可
一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其它功能的运行
Node.js规定一个js文件就是一个模块,模块内部定义的变量和函数默认情况下,外部无法得到
模块内部使用exports对象进行成员导出,使用require方法导入其它模块
set-ExecutionPolicy RemoteSigned
,选择Y或Acnpm install --save-dev @types/node
let a = 10;
var hi = name => { console.log('hi ' + name) };
exports.a = a;
exports.hi = hi;
md = require('./md');
console.log(md.a);
md.hi('node');
node .\index.js
10
hi node
Node运行环境提供的API,都是以模块化的形式存在,因此这些模块又称为系统模块
const fs = require('fs');
// fs.writeFile('文件路径/文件名称', '数据', callback);
fs.writeFile('./file.txt', 'hello node.js', err => {
if (err)
console.log('write err');
else
console.log('write success');
});
// fs.readFile('文件路径/文件名称' [, '文件编码'], callback);
fs.readFile('./file.txt', 'utf-8', (err, doc) => {
if (err)
console.log('read err');
else
console.log(doc);
});
node .\index.js
# 执行结果
write success
hello node.js
为什么要进行路径拼接:不同操作系统路径分隔符不一样
windows: \或/
linux:/
文件中的相对路径是相对于当前执行node时终端所在的路径,而不是文件的路径,因此一般使用绝对路径,使用__dirname获取绝对路径
导入模块时require使用的相对路径是相对于本文件的,所以一般使用相对路径
代码演示
const path = require('path');
// path.join('路径1', '路径2'...);
let filePath = path.join(__dirname, 'index.js');
console.log(filePath);
node .\index.js
# windows下一般使用\分隔
C:\Users\miracle-\Desktop\11-13node+express\day01\code\glx\index.js
# linux下将使用/分隔
为什么是第三方模块
别人写好的、具有特定功能的、拿来直接使用的模块就是第三方模块
第三方模块的两种存在形式
获取第三方模块
本地安装和全局安装
nodemon是一个命令行工具,用以辅助项目开发
在node.js中,每次修改文件都要再命令行工具中重新执行该文件,非常繁琐
使用nodemon运行js文件,修改文件后自动重新执行
nrm(npm registry manager):npm下载地址切换工具
npm默认下载地址在国外,下载速度很慢,因此要切换到国内地址下载
#nrm use taobao
Registry has been set to: https://registry.npm.taobao.org/
#nrm ls
npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
下载命令行工具,全局安装:npm install gulp-cli -g
下载库文件,本地安装:npm install gulp
在项目根目录下新建gulpfile.js文件,文件名不能为其它
重构项目的文件夹结构,src目标放源代码,dist目录放构建后的文件
在gulpfile.js文件中编写任务
在命令行中执行gulp任务
gulp.src():获取任务要处理的文件
gulp.dest():输出文件
gulp.task():简历gulp任务
gulp.watch():监控文件的变化
实例代码
//引入gulp模块
const gulp = require('gulp');
//定义任务first
gulp.task('first', (callback) => {
gulp.src('./src/css/base.css')
.pipe(gulp.dest('./dist/css'));
callback();
});
//命令行中执行任务first
gulp first
[15:00:29] Using gulpfile E:\glx\gulpfile.js
[15:00:29] Starting 'first'...
[15:00:29] Finished 'first' after
下载gulp-file-include:npm install gulp-file-include
下载gulp-htmlmin:npm install gulp-htmlmin
编写gulp任务
const gulp = require('gulp');
const htmlmin = require('gulp-htmlmin');
const fileinclude = require('gulp-file-include');
gulp.task('htmlmin', (callback) => {
gulp.src('./src/*.html')
.pipe(fileinclude())
.pipe(htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('./dist'));
callback();
})
const gulp = require('gulp');
const less = require('gulp-less');
const csso = require('gulp-csso');
gulp.task('cssmin', (callback) => {
gulp.src(['./src/css/*.less', './src/css/*.css'])
.pipe(less())
.pipe(csso())
.pipe(gulp.dest('dist/css'));
callback();
})
下载gulp-babel及其依赖:npm install gulp-babel @babel/core @babel/preset-env
下载gulp-uglify:npm install gulp-uglify
编写任务
const gulp = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
gulp.task('jsmin', (callback) => {
gulp.src('./src/js/*.js')
//将代码转换为当前运行环境所支持的代码
.pipe(babel({ presets: ['@babel/env'] }))
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
callback();
})
gulp.task('copy', (callback) => {
gulp.src('./src/images/*')
.pipe(gulp.dest('dist/images'));
gulp.src('./src/lib/*')
.pipe(gulp.dest('dist/lib'));
callback();
})
//gulp version 3
gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']);
//gulp version 4
gulp.task('default', gulp.series('htmlmin', 'cssmin', 'jsmin', 'copy', done => done()));
它是项目的描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等,使用npm init -y
命令生成
{
"name": "test", //项目名称
"version": "1.0.0", //项目版本
"description": "", //项目描述
"main": "index.js", //项目的主入口文件
"scripts": { //命令的别名
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], //关键字
"author": "", //作者
"license": "ISC", //协议
"dependencies": { //依赖的模块
"formidable": "^1.2.2",
"mime": "^2.4.6"
}
}
npm install
,不需要带参数,自动下载所有的依赖npm install --production
npm install + 包名
,下载的文件会被默认添加到package.json文件的dependencies字段中"dependencies": {
"formidable": "^1.2.2",
"mime": "^2.4.6"
},
npm install 包名 --save-dev
,下载的文件会被默认添加到package.json文件的devDependencies字段中"devDependencies": {
"gulp": "^4.0.2"
}
负责记录模块与模块之间的依赖关系及版本等信息
锁定包的版本,确保再次下载时不会因为包版本不同而产生问题
加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需要下载即可, 不需要额外的工作
require('./kiss.js');
require('./baby');
require('find');