柚子快报激活码778899分享:webpack node

http://yzkb.51969.com/

node.js+webpack

一、fs模块读写文件

const fs = require('fs') // 引入fs对象

fs.writeFile("./test.txt", "hello Node.js", err => { // 写文件

if(err) console.log(err)

else console.log("写入成功")

})

fs.readFile("./test.txt", (err,data) => { // 读文件

if(err) console.log(err)

else console.log(data.toString())

})

二、path模块和__dirname

/ path.join()合并路径

// __dirname获取文件路径

const fs = require('fs')

const path = require('path')

console.log(__dirname)

fs.readFile(path.join(__dirname, "../test.txt"), (err, data) => { // 使用绝对路径

if(err) console.log(err)

else console.log(data.toString())

})

三、http模块创建Web服务

端口号用于标记服务器里不同功能的服务程序

端口号范围:0-65536之间的整数http协议默认访问80端口

// 示例:基于http模块创建Web服务程序

const http = require('http') // 加载http模块,创建Web服务对象

const server = http.createServer()

server.on('request', (req, res) => { // 监听request请求事件,设置响应头和响应体

// 设置响应头:内容类型、普通文本、中文编码格式

res.setHeader('Content-Type','text/plain;charset=utf-8')

res.end("欢迎使用Node.js")

})

server.listen(3001, () => { // 配置端口号并启动Web服务

console.log("Web服务启动成功");

})

四、CommonJS模块和ECMAScript模块实现模块化

CommonJS模块

导出:module.exports = {}

导入:require(‘模块名或路径’)(导入node.js内置模块用模块名,导入自定义模块用路径)

示例:

// util.js文件代码

const baseURL = 'https://www.baidu.com';

const getSum = arr => arr.reduce((sum,item) => sum += item, 0);

module.exports = {

url : baseURL,

arrSum : getSum

};

// index.js文件代码

const util = require('./util.js');

console.log(util.url);

console.log(util.arrSum([10,20,40]));

ECMAScript模块默认导出

由于node.js默认支持CommonJS标准语法,因此使用ECMAScript时需要在运行模块所在文件夹新建package.json文件,并设置{“type”:“module”}

导出:export default = {}

导入:import 变量名 from ‘模块名或路径’ (导入node.js内置模块用模块名,导入自定义模块用路径)

示例:

// util.js文件代码

const baseURL = 'https://www.baidu.com';

const getSum = arr => arr.reduce((sum,item) => sum += item, 0);

export default {

url : baseURL,

arrSum : getSum

};

// index.js文件代码

import ut from './util.js';

console.log(ut.url);

console.log(ut.arrSum([10,20,40]));

ECMAScript模块命名导出

导出:export 修饰定义语句

导入:import {变量名1,变量名2} from ‘模块名或路径’ (导入node.js内置模块用模块名,导入自定义模块用路径)

示例:

// util.js文件代码

export const baseURL = 'https://www.baidu.com';

export const getSum = arr => arr.reduce((sum,item) => sum += item, 0);

// index.js文件代码

import { baseURL,getSum } from "./util.js"; // 必须同名

console.log(baseURL);

console.log(getSum([10,20,40]));

按需加载,使用命名方式全部加载,使用默认方式

五、包的概念

包:将模块、代码、其他资料聚合成一个文件夹

包分类:

项目包–>主要用于编写项目和业务逻辑软件包–>封装工具和方法进行使用

note:包的根目录中,必须要有package.json文件(用于记录清单信息)

{

"name": "06", // 软件包名称

"version": "1.0.0", // 软件包当前版本

"description": "", // 描述包的功能

"main": "index.js", // 软件包的入口点

"author": "WXR", // 软件包作者

"license": "ISC" // 软件包许可证

}

5.1 npm软件包管理

npm是Node.js标准的软件包管理器。

使用步骤:

初始化清单文件 npm init -y (得到package.json文件)下载软件包 npm i 软件包名

5.2 npm安装所有依赖

npm i // 安装依赖

5.3 npm全局软件包nodemon

软件包区别:

本地软件包:当前项目内使用,封装属性和方法,存在于node_modules全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置

nodemon作用:替代node命令,检测代码更改,自动重启程序

安装命令:npm i nodemon -g (-g代表安装到全局环境)

六、Webpack

定义:webpack是一个用于现代JavaScript应用程序的静态模块打包工具。

6.1 webpack使用步骤

新建并初始化项目,编写业务源代码下载webpack webpack-cli到当前项目中(版本独立),并配置局部自定义命令

npm i webpack webpack-cli --save-dev命令用于下载模块在package.json文件中的"scripts"对象内添加自定义命令**“build”:“webpack”** 运行打包命令npm run build,自动产生dist分发文件夹(里面为压缩优化后,可直接执行的代码

6.2 修改webpack入口和出口

步骤:

在项目根目录新建webpack.config.js配置文件导出配置对象,配置入口、出口文件路径

const path = require('path');

module.exports = {

entry: path.resolve(__dirname, 'src/login/index.js'), // 入口

output: {

path: path.resolve(__dirname, 'dist/login'), // 出口

filename: 'index.js',

clean : true // 清空出口文件内的内容

},

};

然后运行打包命令npm run build,重新打包

6.3 自动生成html文件

步骤:

将模板文件放到public/index.html文件中 下载html-webpack-plugin本地软件包(命令:npm install --save-dev html-webpack-plugin) 配置webpack.config.js让Webpack拥有插件功能

const path = require('path');

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

plugins : [ // 插件

new HtmlWebpackPlugin({

template : path.resolve(__dirname, 'public/index.html'), // 模板文件

filename : path.resolve(__dirname, 'dist/login/index.html') // 输出文件

})

]

};

然后运行打包命令npm run build,重新打包

6.4 打包css代码

note:Webpack默认只识别js代码

步骤:

准备css文件代码,将其引入到src/login/index.js中(引入语法:import ‘index.js’)下载scc-loader和style-loader本地软件包(命令:npm install --save-dev css-loader style-loader)配置webpack.config.js让Webpack拥有加载器功能

module.exports = {

module: {

rules: [

{

test: /\.css$/i, // 匹配后缀为.css的文件,不区分大小写

use: ["style-loader", "css-loader"], // 从后往前匹配css、style

},

],

},

};

然后运行打包命令npm run build,重新打包

6.5 提取css代码

将css文件提取到单独的文件中,可以让css文件被浏览器缓存,减少js文件体积

步骤:

下载mini-css-extract-plugin本地软件包(命令:npm install --save-dev mini-css-extract-plugin)配置webpack.config.js让Webpack拥有提取css代码的插件功能

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {

plugins : [ // 插件

new MiniCssExtractPlugin(),

],

module: {

rules: [

{

test: /\.css$/i, // 匹配后缀为.css的文件,不区分大小写

use: [MiniCssExtractPlugin.loader, "css-loader"], // 从后往前匹配

},

],

},

};

然后运行打包命令npm run build,重新打包

note:不能和style-loader一起使用

6.6 压缩css代码

步骤:

下载css-minimizer-webpack-plugin本地软件包(命令:npm install --save-dev css-minimizer-webpack-plugin)配置webpack.config.js让Webpack拥有压缩css代码的插件功能

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {

plugins : [ // 插件

new MiniCssExtractPlugin(),

],

module: {

rules: [

{

test: /\.css$/i, // 匹配后缀为.css的文件,不区分大小写

use: [MiniCssExtractPlugin.loader, "css-loader"], // 从后往前匹配

},

],

},

optimization: { // 压缩js或css代码在此处配置

minimizer: [

// For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line

`...`,

new CssMinimizerPlugin(),

],

},

};

最后运行打包命令npm run build,重新打包

6.7 打包less代码

less-loader需要配合less软件包使用

步骤:

新建less代码并引入到src/login/index.js中(import ‘./index.less’)下载less和less-loader本地软件包(命令:npm install less less-loader --save-dev)配置webpack.config.js让Webpack拥有打包less代码的功能

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {

plugins : [ // 插件

new MiniCssExtractPlugin(),

],

module: {

rules: [

{

test: /\.css$/i, // 匹配后缀为.css的文件,不区分大小写

use: [MiniCssExtractPlugin.loader, "css-loader"], // 从后往前匹配

},

{

test: /\.less$/i, // 打包less代码

use: [

// compiles Less to CSS

MiniCssExtractPlugin.loader,

'css-loader',

'less-loader',

],

},

],

},

optimization: { // 压缩js或css代码在此处配置

minimizer: [

// For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line

`...`,

new CssMinimizerPlugin(),

],

},

};

最后运行打包命令npm run build,重新打包

6.8 打包图片

资源模块 Webpack5 内置资源模块(字体、图片等)打包,无需额外的loader

步骤:

配置webpack.config.js让Webpack拥有打包less图片的功能

占位符 [hash] 对模块内容做算法计算,得到映射的数字字母组合的字符串占位符[ext]使用当前模块原本后缀的占位符,例如.png/.jpg等字符串占位符[query] 保留引入文件时代码中查询参数(只有URL下生效)

module: {

rules: [

{

test: /\.(png|jpg|jpeg|gif)$/i, // 匹配后缀为png|jpg|jpeg|gif的文件

type: 'asset', // 判断临界值默认为8KB,大于8KB的文件,发送一个单独的文件并导出URL地址;小于8KB的文件,导出一个data URI(base64字符串)

generator: {

filename: 'assets/[hash][ext][query]' // 配置输出文件的格式

}

}

],

},

最后运行打包命令npm run build,重新打包

6.9 搭建开发环境

开发环境:配置webpack-dev-server快速开发应用程序

作用: 启动Web服务,自动检测代码变化,热更新到网页(dist目录和打包是在内存里)

步骤:

下载webpack-dev-server软件包到当前项目(命令:npm install --save-dev webpack-dev-server)设置开发模式,并配置自定义命令

// 设置webpack.config.js中的mode为开发模式

module.exports = {

// ...

mode : 'development',

};

// 在package.json中设置自定义命令

"scripts": {

"dev": "webpack serve --open"

},

使用npm run dev来启动开发服务器

note: 默认以public文件夹作为服务器根目录;并且也会将output.path中的内容放到这个根目录中(只在内存中)

6.10 打包模式

打包模式:告知webpack使用相应模式的内置优化

分类:

模式名称模式名称特点场景开发模式development调试代码,实时加载,模块热替换等本地开发生产模式production压缩代码,资源优化,更轻量打包上线

两种设置方式(命令行设置的优先级更高):

// 1、在webpack.config.js配置文件设置mode选项

module.exports = {

// ...

mode : 'development/production',

};

// 2、在package.json命令行设置mode参数

"scripts": {

"build" : "webpack --mode=production",

"dev": "webpack serve --open --mode=development"

},

6.11 打包模式的应用

实现在开发模式下用style-loader,在生产模式下提取css代码

方案一:在webpack.config.js中配置导出函数,但是局限性大(只接受两种模式)

方案二:借助cross-env(跨平台通用)包命令,设置参数区分环境

步骤:

下载cross-env软件包到当前项目配置package.json中自定义命令,传入参数名和值,在webpack.config.js区分不同环境使用配置

// 1、在webpack.config.js配置文件设置mode选项

module.exports = {

// ...

module: {

rules: [

{

test: /\.css$/i, // 匹配后缀为.css的文件,不区分大小写

use: [process.env.NODE_ENV === 'development' ? 'style-loader' : MiniCssExtractPlugin.loader,"css-loader"], // 从后往前匹配

},

{

test: /\.less$/i,

use: [process.env.NODE_ENV === 'development' ? 'style-loader' : MiniCssExtractPlugin.loader,

'css-loader',

'less-loader'],

},

],

},

};

// 2、在package.json命令行设置mode参数

"scripts": {

"build": "cross-env NODE_ENV=production webpack --mode=production",

"dev": "cross-env NODE_ENV=development webpack serve --mode=development --open"

},

重新打包观察变化

方案三:配置不同的webpack.config.js(适用于多种模式差异性较大的情况)

6.12 注入环境变量

实现在开发模式下打印语句生效,生产模式下打印语句生效

问题:cross-env设置的变量只在Node.js环境变量中有效,前端代码无法访问process.env.NODE_ENV

使用Webpack内置的DefinPlugin插件(在编译时,将前端代码中匹配的变量名,替换为值或表达式)

// 1、在webpack.config.js配置文件设置plugins选项

const webpack = require("webpack");

config = {

plugins : [ // 插件

new webpack.DefinePlugin({

'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)

}),

],

};

module.exports = config

6.13 开发环境调错-source-map

问题: 代码被压缩和混淆,无法正确确定源代码位置(行数和列数)

source map:可以准确追踪error和warning在原始代码的位置(仅适用于开发环境,不要在生产环境使用)

设置webpack.config.js配置devtool选项

module.exports = {

// ...

devtool : 'inline-source-map' // 将源代码位置信息一起打包在js文件内

}

6.14 解析别名 alias

解析别名:配置模块使import引入模块更简单

在webpack.config.js中配置解析别名@来表示src绝对路径

module.exports = {

// ...

resolve : {

alias : {

'@' : path.resolve(__dirname, 'src')

}

}

}

6.15 优化-CDN的使用

使用CDN的作用:把静态文件/第三方库放在CDN网络中各个服务器中,供用户就近请求获取

需求:实现开发模式使用本地第三方库,生产模式下使用CDN加载引入

步骤:

在html中引入第三方库的CDN地址,并用模板语法判断

<%if(htmlWebpackPlugin.options.useCdn){ %>

<%}%>

在webpack.config.js中[externals]外部扩展选项(防止某些import的包被打包)

const config = {

// ...

plugins:[

new HtmlWebpackPlugin({

// ...

// 自定义属性,在html模版<%if(htmlWebpackPlugin.options.useCdn){ %>使用

useCdn : process.env.NODE_ENV === 'production',

})

]

}

if(process.env.NODE_ENV === 'production')

{

// key : 代码中import from 后面的模块标识符字符串

// value : 替换在原地的变量名

config.externals = {

'bootstrap/dist/css/bootstrap.min.css' : 'bootstrap',

'axios' : 'axios',

}

}

柚子快报激活码778899分享:webpack node

http://yzkb.51969.com/

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。