Vue2.0学习(一)前端工程化与webpack

前端开发

一、前端工程化

企业级开发中,把前端开发需要的工具、技术、流程、经验进行规范化、标准化。

二、webpack

前端项目工程化的具体解决方案。
1.主要功能

提供友好的前端开发支持,以及代码压缩混淆、处理浏览器端JS的兼容性、性能优化等。(浏览器自动转化代码,使在低版本高版本浏览器中都能运行)

2.创建初始项目注意事项

1).新建项目空白目录(目录中不能有中文),并运行(在项目根目录打开命令行) npm init –y 命令,初始化包管理配置文件 (生成)package.json。
2).运行 npm install jquery –S 命令,安装 jQuery(是小写的jquery,大写的版本很低,后面npm会报错
(3.通过 ES6 模块化的方式导入 jQuery:

import $ from "jQuery";

3.安装和配置webpack

1).安装:在终端运行安装webpack的两个包:

npm install webpack@5.42.1 webpack-cli@4.7.2 -D

2).配置
(1)在项目**根目录(不是src目录!)**中,创建名为 webpack.config.js 的 webpack 配置文件,并初始化如下的基本配置:

module.exports = {
    mode: 'development' //构建模式:development、production
};

mode代表webpack运行的模式,开发时一定要用development,打包速度比较快,发布上线时一定要用production,因为上线追求的是体积小
(2) 在 package.json 的 scripts 节点下,新增 dev 脚本如下:

"scripts": {
        "dev": "webpack"
    }

(3)终端中运行 npm run dev 命令,启动 webpack 进行项目的打包构建:
运行成功如图:
运行npm结果
运行后会自动生成一个dist文件,里面有个main.js文件,引入这个文件代替原来报错的js文件就可以解决原来js产生的兼容性问题。

4.webpack的默认约定

在 webpack 4.x 和 5.x 的版本中,有如下的默认约定:
① 默认的打包入口文件为 src -> index.js,会被优先处理
② 默认的输出文件路径为 dist -> main.js
注意:可以在 webpack.config.js 中修改打包的默认约定:
1)修改打包入口:通过 entry 节点指定打包的入口

2)修改打包出口:通过 output 节点指定打包的出口

// 导入path
const path = require('path');

module.exports = {
    entry: path.join(__dirname, './src/index1.js'),
    output: {
        path: path.join(__dirname, './dist'), //输出文件的存放路径
        filename: 'bundle.js' //生成的文件名
    },
    mode: 'development' //构建模式:development、production
};

__dirname为当前文件目录,即项目根目录(webpack.config.js 的目录),拼接目标js目录。

5.webpack插件

1)webpack-dev-server:设置保存代码时自动npm run dev
(1)安装:

npm install webpack-dev-server@3.11.2 -D

(2)配置webpack-dev-server,让插件实行实施打包功能
① 修改 package.json -> scripts 中的 dev 命令如下:

"scripts": {
        "dev": "webpack serve"//增加“ serve”
    }

② 再次运行 npm run dev 命令,重新进行项目的打包
如果报错:[webpack-cli] Unable to load ‘@webpack-cli/serve’ command,执行:

npm install webpack-cli --save-dev

参考博客
再执行npm run dev:
运行成功结果

③ 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果
④需要重新加载js,插件把js保存到内存中而不是原来的dist文件夹中,所以需要重新引入内存中的js

<!--加载内存中bundle.js -->
    <script src="/bundle.js"></script>

只能用http://localhost:8080/src访问打开index.html,否则会报错。

2)html-webpack-plugin,对html进行操作,复制文件到指定位置
(1)安装:

npm install html-webpack-plugin@5.3.2 -D

(2)配置

//①导入HTML插件
const htmlPlugin = require('html-webpack-plugin');
//②创建HTML插件的实例对象
const htmlPlugin = new HtmlPlugin({
    template: './src/index.html', //指定文件路径
    filename: './index.html' //指定生成路径
});
module.exports = {
    mode: 'development', //构建模式:development、production
    //③通过plugins节点使htmlPl插件生效
    plugins: [htmlPlugin]
};

这个插件生成页面的同时也会自动引入打包的bundle.js文件,被复制的页面不用再引入打包的js文件.如果运行npm run dev报错,可以尝试执行npm install jquery –S 重新安装jQuery,再执行启动服务器。
运行结果

3)devSever节点:在 webpack.config.js 配置文件中,可以通过 devServer 节点对 webpack-dev-server 插件进行更多的配置

//初次打包后自动打开浏览器
    devServer: {
        open: true,
        //自定义打开端口,http协议中端口80可以被省略
        port:80,
        //指定打开运行的主机地址
        host:'127.0.0.1',

4)加载器loader:webpack只能处理**.js文件**,loader可以帮忙处理非js文件
(1)处理CSS文件:把css文件用Es6引入入口文件中做模块化处理,需要解决处理非js文件问题,用css-loader加载处理CSS文件。
①安装

npm i style-loader@3.0.0 css-loader@5.2.6 -D

②在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

module: {
        rules: [
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
    }

重新启动dev,得到正确运行结果。
(2)处理less文件(可以嵌套写样式):less-loader
①安装:

npm i less-loader@10.0.1 less@4.1.1 -D

②配置

module: {
        rules: [
            { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
        ]
    }

5)打包处理样式中与URL路径相关的的文件:
性能优化,把图片(小图片)转为base64字符串,避免引起不必要的网络请求。
① 安装文件包:运行 npm i url-loader@4.1.1 file-loader@6.2.0 -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

    module: {
        rules: [
            //css对应模块
            //limit指定图片最大的大小,只有小于limit才能被转为base64格式的图片,用?拼接
           { test: /\.jpg|png|gif$/, use: 'url-loader' },

        ]
    }

6)打包处理 js 文件中的高级语法:
webpack 只能打包处理一部分高级的 JavaScript 语法。对于那些 webpack 无法处理的高级 js 语法,需要借
助于 babel-loader 进行打包处理。
①运行如下的命令安装对应的依赖包:

npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D

②在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },

exclude:排除第三方包中的js文件,以免第三方包被错误处理失效。
③配置 babel-loader
在项目根目录下,创建名为 babel.config.js 的配置文件,定义 Babel 的配置项如下:

module.exports = {
    plugins: [
        ['@babel/plugin-proposal-decorators', { legacy: true }]
    ]
}

详情请参考 Babel 的官网

6.打包发布

在 package.json 文件的 scripts 节点下,新增 build 命令如下:

"scripts": {
        "dev": "webpack serve",
        "build": "webpack --mode production"
    }

然后执行npm run build,发布成功会在根目录新增一个dist文件夹。
–model 是一个参数项,用来指定 webpack 的运行模式。production 代表生产环境,会对打包生成的文件进行代码压缩和性能优化。
注意:通过 --model 指定的参数项,会覆盖 webpack.config.js 中的 model 选项
优化:可以在出口文件上增加目录对打包后的文件进行分类
filename: 'js/bundle.js'
②在url-loader的配置时增加文件目录:?后面有多个参数是用&添加

{ test: /\.jpg|png|gif$/, use: 'url-loader?limit=60000&outputPath=img' }

试了一下,这个地方得写limit参数才能添加文件目录。
③每次发布自动删除旧的dist文件:安装插件clean-webpack-plugin
安装:npm install --save-dev clean-webpack-plugin
配置:

//导入HTML插件
const HtmlPlugin = require('html-webpack-plugin');
//导入CleanWebpackPlugin构造函数
const { CleanWebpackPlugin } = require('clean-webpack-plugin');


//然后再plugins数组中加入
plugins: [htmlPlugin, new CleanWebpackPlugin()],
7.source map

一个存储位置信息(源代码和打包文件对于行号)的文件。
问题:源代码经打包压缩后行号会发生改变,造成代码报错时难以精准定位到错误位置。
有了source map,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试
方法:在module中增加devtool: 'eval-source-map'(开发调试阶段都这样设置方便调试,发布后关闭比较安全)
如果只定位不暴露源码:设置devtool:'nosources-source-map'
既定位也看源码(非常不安全!!!):devtool:'source-map'

8.其实这些都不用自己配,vue可以直接引入创建。

@可以表示 目录
配置webpack.config.js文件,在module.exports中新增:

resolve:{
        alias:{
            '@':path.join(__dirname,'./src/')
        }
    }

就将@设置成src这层目录了,若想使用src/js,可以直接写@/js

三、安装vue插件

把插件拖动到扩展程序页就行,要打开Chrome右上角开发者模式,安装后关闭开发者模式。然后打开插件详情->允许访问文件目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值