飞道的博客

Vue-webpack打包教程

190人阅读  评论(0)

webpack

1.创建项目并在终端初始化

npm init -y

在项目目录下回生成一个package.json文件

2.在项目目录下创建src文件夹,在src目录下创建index.html文件和index.js文件

index.html内容为:

<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>

3.在终端安装jQuery

npm install jquery -S
//npm i jquery	 建议这样写

会在项目目录下生成一个package-lock.json文件和node_modules文件夹(这个文件夹可以删掉,后续需要的话可以重新下载,命令:npm i

4.向index.js填充内容,并实现功能

导入jQuery
import $ from "jquery"
index.js内容
import $ from "jquery";
$(function () {
    $("li:odd").css("background", "pink");
    $("li:even").css("background", "orange");
})
在index.html内导入index.js
<script src="./src/index.js"></script>

src路径按照自己创建的路径为准

浏览器报错:

Uncaught SyntaxError: Cannot use import statement outside a module

安装webpack的原因:

因为**import $ from “jquery”**是ES6的语法代码,浏览器存在兼容性问题,所以需要安装webpack,将高版本的语法编程浏览器可以识别的语法,webpack只能打包js文件

安装webpack步骤:

1.在终端输入命令:

npm install webpack webpack-cli -D
//若有报错就试试把-D改为-g

2.在项目根目录下创建一个webpack.config.js的配置文件来配置webpack。

向webpack.config.js添加内容:
module.exports = {
	mode:"development",
}
mode设置的是项目的编译模式,可以设置的两个值:

development(开发模式):表示项目处于开发阶段,不会进行压缩和混淆,打包速度会快一些

production(发布模式):表示项目处于发布阶段,会进行压缩和混淆,打包速度会慢一些

3.向项目目录下的package.json文件添加运行脚本dev:

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

这个dev是自定义命名的

4.运行dev命令进行项目打包

在终端输入命令,将会启动webpack进行项目打包

这里的dev是第三步里面的dev,第三步命名什么这里的就是什么

npm run dev

成功后会在项目目录下成成一个dist文件夹,文件夹下有一个main.js文件

在index.html中修改导入的js文件
<script src="../dist/main.js"></script>

页面效果渲染正确

在此之前,修改之后,都要用npm run dev进行打包,打包之后,效果才会改变

设置webpack的打包入口/出口

在webpack 4x中,

会默认将src/index.js作为默认的打包入口js文件;

会默认将dist/main.js作为默认的打包输出js文件;

如果不想使用默认的入口/出口js文件,可以通过改变webpack.config.js来设置入口/出口的js文件:
const path = require("path");
module.exports = {
    // development开发模式、production发布模式
    mode: "development",
    // 设置入口文件路径
    entry: path.join(__dirname, "./src/index.js"),
    // 设置出口文件
    output: {
        // 设置路径
        path: path.join(__dirname, "./dist"),
        // 设置文件名
        filename: "bundle.js"
    }
}

设置webpack的自动打包

修改js文件中的代码后,需要重新运行命令npm run dev打包webpack,才能生成出口的js文件

1.安装自动打包功能的包:webpack-dev-server

在终端输入:

npm install webpack-dev-server -D

2.修改package.json中的dev指令

"scripts": {
    "dev": "webpack-dev-server"
  },

webpack-dev-server自动打包的输出文件(bundle.js),默认放到了服务器的根目录下

自动打包完毕后,默认打开服务器网页

解决:在package.json中的dev指令

webpack 5与webpack-dev-server 3 兼容性问题

"scripts": {
    "dev": "webpack serve --open Chrome.exe"
  },

在这里可能会出现:

[webpack-cli] Would you like to install 'webpack-dev-server' package? (That will run 'npm install -D webpack-dev-server') (Y/n)

Y,然后回车就可以了

在终端执行npm run dev后,会自动跳转到浏览器

浏览器默认访问的地址为:http://localhost:8080/

3.修改index.html中js文件的路径

bundle.js会保存到内存里面(在根目录下面),而不是在dist文件夹下面的那个

<script src="/bundle.js"></script>

在此之后,修改相关文件后,保存即可,不用再执行命令npm run dev,也不用跳转到浏览器去,会自动跟随保存更新的

但是这里一开始浏览器打开的是项目目录页面(文件和文件夹),而不是index.html页面,需要自行点开src文件夹才打开index.html页面

生成预览页面——html-webpack-plugin

在内存里面(根目录)生成一个预览页面而不是在本地生成

实现步骤:

1.安装默认预览功能的包:html-webpack-plugin

npm install html-webpack-plugin -D

2.修改webpack.config.js文件:

//导包
const HtmlWebpackPlugin = require("html-webpack-plugin");
// 创建对象
const htmlPlugin = new HtmlWebpackPlugin({
//是键值对,用:相连的,而不是用=号,后面加逗号
    // 设置生成预览页面的模板文件
    template: "./src/index.html",
    // 设置生成的预览页面名称
    filename:"index.html",
})
module.exports = {
    ......
    plugins: [htmlPlugin]
}

设置完,npm run dev之后打开的就是index.html页面了

webpack中的加载器(loader)

通过loader打包非js模块:在默认情况下,webpack只能打包js文件,如果下载想要打包非js文件,需要调用loader加载器才能打包

loader加载器包含:

1).less-loader:处理less文件

2).sass-loader

3).url-loader:打包处理css中与url路径有关的文件

4).babel-loader:处理高级js语法的加载器

5).postcss-loader

6).css-loader,style-loader

**注意:**指定多个loader时的顺序是固定的,而调用loader的顺序是从后往前进行调用的

安装style-loader,.css-loader来处理样式文件

1.安装包

在终端输入

npm install style-loader css-loader -D
2.配置规则:更改webpack.config.js的module中的rules数组
plugins: [htmlPlugin],		//这是前面添加过的
    module: {
        rules: [{
            // test设置需要匹配的文件类型,支持正则\.是.,前面的\是解析的意思,$是文件名一定要是.css结尾
            test: /\.css$/,
            // use表示该文件类型需要调用的loader(加载器)
            use: ['style-loader', 'css-loader'],
        }]
    }

在项目目录下的src文件夹下面创建一个css文件夹,在css文件夹下面创建一个index.css文件,自行添加内容

在入口文件index.js中引入(导入)index.css文件

import "./css/index.css";

因为导入的是一个文件,所以不用from

最后在终端执行npm run dev 命令即可

安装less,less-loader,来处理less文件

1.安装包
npm install less-loader less -D
2.配置规则:更改webpack.config.js的module中的rules数组
rules: [
            // 这里是css文件的配置规则
            {
   
                // test设置需要匹配的文件类型,支持正则
                test: /\.css$/,
                // use表示该文件类型需要调用的loader(加载器)
                use: ['style-loader', 'css-loader'],
            },
            // 这里是less文件的配置规则
            {
   
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader'],
            }
        ]

在css文件夹下创建一个index.less文件,自定义内容为:

ul{
   
    li{
   
        color: white;
    }
}

在index.js中导入index.less文件

import "./css/index.less";

最后在终端执行npm run dev 命令即可

安装sass-loader,node-sass处理scss文件

1.安装包
npm install sass-loader node-sass -D

这一步可能会失败会报错(因为npm是从国外拿数据的),解决方案如下:

解决方案一:

设置全局镜像源:

npm config set sass_binary_site https://npm.taobao.org/mirrrors/node-sass/

然后再重新安装

npm install sass-loader node-sass -D

解决方案二:

npm install -g cnpm --registry=https://registry.npm.taobao.org

然后再执行命令:

cnpm install sass-loader node-sass --save-dev

解决方案三:

安装python,安装目录必须在C:/Python27

然后执行命令:

cnpm install sass-loader node-sass --save-dev
2.配置规则:更改webpack.config.js的module中的rules数组
 module: {
        // rules里面存放的是对象
        rules: [
            // 这里是css文件的配置规则
            {
                // test设置需要匹配的文件类型,支持正则
                test: /\.css$/,
                // use表示该文件类型需要调用的loader(加载器)
                use: ['style-loader', 'css-loader'],
            },
            // 这里是less文件的配置规则
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader'],
            },
            // 这里是scss文件的配置规则
            {
                test: /\.scss$/,
                use: ['style-loader', 'css-loader', 'sass-loader'],
            }
        ]
    }

在css文件夹下创建index.scss文件(后缀名一定是scss,而不是sass),自定义内容:

ul {
   
    li{
   
        border: 1px solid blue;
        margin: 10px auto;
    }
}

在index.js中引入index.scss文件

import "./css/index.scss";

最后在终端执行npm run dev 命令即可

打包样式表的图片以及字体字体

使用url-loader和file-loader来处理

1.安装包
cnpm install url-loader file-loader -D

如果在这里报错的话,就试试先执行下面的命令再进行安装,

npm install -g cnpm --registry=https://registry.npm.taobao.org
2.配置规则:更改webpack.config.js的module中的rules数组
// 图片的配置规则
            {
                // 设置图片的后缀名
                test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
                // limit用来设置字节数,只有小于limit值的图片,才会转换
                use: "url-loader?limit=16940",
            }

在index.html中添加一个div

<div class="box">

    </div>

在index.css中添加相关样式

.box {
  width: 200px;
  height: 200px;
  border: 1px solid firebrick;
  background-image: url(../img/sortPhone_03.png);
}

最后在终端执行npm run dev 命令即可

如果在index.html中直接添加图片,浏览器中是不显示的

<img src="./img/sortPhone_03.png" alt="">

因为装了插件,所以图片到内存里面去了,地址就要改一改

<img src="/src/img/sortPhone_03.png" alt="">

最后在终端执行npm run dev 命令即可

打包js文件中的高级语法

如果是webpack 4版本的话,可能要装一下,如果是5的话,可以不用搞这一步

安装babel系列的包

1.安装babel转换器
npm install babel-loader @babel/core @babel/runtime -D
2.安装babel语法插件包
npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
3.在项目根目录下创建并配置babel.config.js文件
module.exports={
	presets:["@babel/preset-env"],
	plugins:["@babel/plugin-transform-runtime","@babel/plugin-proposal-class-properties"]
}
4.配置规则:更改webpack.config.js的module中的rules数组
{
test:/\.js$/,
use:"babel-loader",
exclude:/node_modules/
}

Vue单文件组件

vue安装Vetur插件可以使得.vue文件中的代码高亮

配置.vue文件的加载器

1.安装vue组件的加载器
npm install vue-loader vue-template-compiler -D

上一个命令不可以的话就试试下面这个命令

cnpm install vue-loader vue-template-compiler -D
4.配置规则:向webpack.config.js添加一些内容
const VueLoaderPlugin = require("vue-loader/lib/plugin");
const vuePlugin = new VueLoaderPlugin();
module.exports ={
plugins: [htmlPlugin, vuePlugin],
module: {
 rules:{
 ......其他规则
 // vue文件的配置规则
            {
                test: /\.vue$/,
                loader: "vue-loader"
            }
 }
}

}

在webpack中使用vue

1.安装vue
npm install vue -S

上面命令报错就使用下面的命令

cnpm install vue -S
2.在index.js中导入vue
import Vue from "vue";
3.在inde.html中创建:
<div id="app">

    </div>
在src文件夹下创建test.vue文件,内容为
<template>
  <!-- 这里面内容自定义 -->
  <div>hello</div>
</template>
<script>
export default {};
</script>
<style>
</style>
4.在index.js中创建Vue实例对象,并引入test.vue
import test from "./test.vue";
const vm = new Vue({
   
    el: "#app",
    // render函数渲染单文件组件
    //h()里面test是上面import来的test
    render: (h) => h(test),
})

可能有个报错:

DevTools failed to load SourceMap: Could not load content for webpack://package/node_modules/sockjs-client/dist/sockjs.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
module.exports ={
	plugins: [htmlPlugin, vuePlugin],
	//加上这个配置
	devtool: 'inline-source-map',
}

使用webpack打包发布项目

1.配置package.json
"scripts": {
    "dev": "webpack serve --open Chrome.exe",
    //"build": "webpack -p"		这是webpack4版本的写法
    "build": "webpack"
  },
2.项目打包
npm run build

在项目打包(npm run build)之前,可以将dist目录删除,打包完成后会生成全新的dist目录

dist文件夹下生成一个bundle.js文件和一个index.html文件,就说明打包成功


转载:https://blog.csdn.net/h_jQuery/article/details/116700650
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场