使用webpack手动搭建一个 vue-cli

本文详细介绍如何从零开始,不依赖于任何脚手架工具,手动搭建一个Vue项目,包括环境配置、项目结构搭建、webpack配置、开发与生产环境分离、组件化开发、样式处理等关键步骤。

引子

1:请问下面两个创建项目的命令区别是什么?

vue create project 

 

vue init webpack project

2:前端的业务代码与框架代码,工程师与架构师 他们的关系是什么?

 

一,环境

1,需要安装node.js  ,安装方式请参考 Node.js 安装配置 

2,使用yarn 来 创建 package.json 文件 管理 项目 

npm install -g yarn
yarn init -y

二,过程

1,创建项目目录

项目名webpackage-create-vue-cli 的文件目录,并进入项目目录下

md webpackage-create-vue-cli

cd webpackage-create-vue-cli

在项目目录下 创建一个index.html 文件

cd.>index.html //创建index.html 文件

新建src文件夹,在src文件夹下新建components文件件 

md src //创建src文件夹
cd src //进入到src文件下
md components //创建组件文件夹
cd .. //退出到项目目录下

为了使编码方便 ,我们 可以使用vscode打开项目

code . //启动vscode打开项目

vscode 打开后的目录界面如下

 

2,拿vue包

既然我们要 做一个 vue的cli ,我们首先得把 vue 的包 拿下来

yarn add -D vue

3,拿webpack  和webpack-cli  两个包

我们使用webpack 来做 ,还需要 webpack  和webpack-cli  两个包

yarn add -D webpack webpack-cli

4,在test.js中引入 vue.esm 模块

在components下新建一个 test.js 的文件

在test.js里面引入 vue.esm 模块,并且实例化一个对象

 test.js 代码如下 

import VueTest from 'vue/dist/vue.esm'; //引入vue的esm
const vm = new VueTest({
    el: "#app",
    data: {},
    components: {
        //自己写的一个test 组件
        test: {
            data() {
                return {
                    tips: "我在学前端vue"
                }
            },
            template: '<div>{
  
  {tips}}</div>' //组件模版内容
        }
    },
    template: '<div> <test></test> </div>' //挂载 test 组件
})

5,配置webpack.config.js

我们再新建一个webpack 的配置文件 webpack.config.js  最好是手动一个字母一个字母敲一下 里面的代码

const path = require("path") //引入node 的path模块
module.exports = {
    //打包模式
    mode: 'none', //none :不压缩,development:开发模式打包,product:正式版压缩方式
    //入口文件
    entry: './src/components/test.js',
    //打包输出的路径
    output: {
        path: path.resolve(__dirname, "distTest"),
        filename: 'indexTest.js'
    }
}

当前的项目的内容如下图

6, npx 命令 webpack 来打包

现在 我们可以使用 npx 命令 webpack 来打包了

npx webpack
Hash: 3f5fcf9785be9ce01d6e
Version: webpack 4.44.1
Time: 532ms
Built at: 2020-09-09 14:24:21
       Asset     Size  Chunks             Chunk Names
indexTest.js  333 KiB       0  [emitted]  main
Entrypoint main = indexTest.js
[2] (webpack)/buildin/global.js 472 bytes {0} [built]
    + 5 hidden modules

这时在我们的项目下就会多一个distTest的文件夹

现在我们就需要在index.html 中引用这个生成的indexTest.js文件

<!DOCTYPE html>
<html>

<head>
    <title>自己搭建vue-cli</title>

</head>

<body>
    <div id="app"></div>
    <!--这个js文件引用不要放 head 中去,html未加载完,会找不到 app 这个div-->
    <script src="./distTest/indexTest.js"></script>
</body>

</html>

用浏览器访问这个hmtl的效果如下

上面的代码 有以下几个问题,

1:开发时每次更新代码后都需要重新打包

2:未区分开正式环境和开发环境

 

怎么区分呢?我们需要使用webpack-dev-server来做,这个用户开发调试、提供web服务、热更新、接口代理等等

yarn add -D webpack-dev-server

7,npx 来启动 webpack-dev-server

怎么用?我们直接用npx 来启动 webpack-dev-server

npx webpack-dev-server
i 「wds」: Project is running at http://localhost:8081/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from F:\GitHub_Code\webpackage-create-vue-cli
i 「wdm」: Hash: fef2f0a2dc251cf7cea6
Version: webpack 4.44.1
Time: 1005ms
Built at: 2020-09-09 14:52:21
       Asset     Size  Chunks             Chunk Names
indexTest.js  667 KiB       0  [emitted]  main
Entrypoint main = indexTest.js
 [0] multi (webpack)-dev-server/client?http://localhost:8081 ./src/components/test.js 40 bytes {0} [built]
 [1] (webpack)-dev-server/client?http://localhost:8081 4.29 KiB {0} [built]
 [2] (webpack)-dev-server/node_modules/strip-ansi/index.js 161 bytes {0} [built]
 [3] (webpack)-dev-server/node_modules/ansi-regex/index.js 135 bytes {0} [built]
 [4] (webpack)-dev-server/client/socket.js 1.53 KiB {0} [built]
 [5] (webpack)-dev-server/client/clients/SockJSClient.js 4.06 KiB {0} [built]
 [7] (webpack)/buildin/global.js 472 bytes {0} [built]
 [9] (webpack)-dev-server/client/overlay.js 3.51 KiB {0} [built]
[15] (webpack)-dev-server/client/utils/log.js 964 bytes {0} [built]
[17] (webpack)-dev-server/client/utils/sendMessage.js 402 bytes {0} [built]
[18] (webpack)-dev-server/client/utils
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值