手动撸一个webpack脚手架(仿vue-cli2)

其实vue的脚手架是真的多,vue的nuxt脚手架的,vue的webpack脚手架的,还有各种gitHub上的后台管理系统模板的。。。。。
而vue-cli2的webpack模板,这个相信是大多数人最为熟悉的模板了。现在再去安装官网上模板的话,已经基于vue-cli3安装的了。
为了巩固webpack配置的知识,自己决定再手动撸一遍vue-cli2脚手架的配置。
1新建一个空文件夹,命名demo,用vscode打开
2、新建src文件夹,在下面新建App.vue

*.vue 文件,是一个自定义的文件类型,用类似HTML的语法描述一个Vue组件。每个.vue文件包含三种类型的顶级语言块 template , script 和 style。这三个部分分别代表了 html,js,css。
但是浏览器本身并不认识.vue文件,所以必须对.vue文件进行加载解析,此时需要vue-loader。还需要css-loader,vue-template-compiler

<template>
    <div>
        <h3>this is a login component</h3>
    </div>
</template>
<script>
export default {
    
}
</script>
<style lang="css">
    h3{
        color:skyblue;
    }
</style>

3、在项目根目录新建main.js,将App.vue挂载到vue实例上

import Vue from 'vue'
import App from './src/App.vue'
import './src/assest/css/global.css'
const div1=document.createElement('div')
document.body.appendChild(div1)
new Vue({
    //el:'#app',
    render: h => h(App)
}).$mount(div1)
//一直报错can not find element '#app',毕竟创建了div根节点而已

4、在项目根目录下新建webpack.config.js,作为webpack打包的配置
webpakc官网入口有个基础入口出口配置,传送门https://www.webpackjs.com/

简单来说,webpack就是一个模块加载器,所有资源都可以作为模块来加载,最后打包输出,其核心配置文件就是webpack.config.js

const path=require('path')//node的
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports={
    target:'web',//
    entry:path.resolve(__dirname,'main.js'),//打包指定文件为main.js
    output:{
        path:path.resolve(__dirname,'dist'),//打包输出路径为根目录的dist文件夹
        filename:"[name].js"//name是chunk的通配符,可以理解为就是入口文件名。本例打包出来的文件为:main.js
    },
    module:{
        //webpack只认识.js,对于其他文件需要配置响应的loader来解析
        rules:[
           {
                test:/\.vue$/,
                loader:'vue-loader'
            },
            {
                test:/\.css$/,
                loader:'css-loader'
            },
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                  limit: 1024,
                  name: '[name].[hash:7].[ext]'
                }
              },
              {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                  limit: 10000,
                  name:'fonts/[name].[hash:7].[ext]'
                }
            }
        ]
    },
    plugins: [
        // vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.
        new VueLoaderPlugin()
    ],
}

5、npm安装所需loader
在终端输入npm init -y
会看到根目录下生成package.json,还有package-lock.json(用以记录当前状态下实际安装的各个npm package的具体来源和版本号。)

npm i webpack vue-loader css-loader vue-template-compiler url-loader file-loader -D 
npm i vue -S

6、然后就行了??no
打开package.json,增加自定义build命名

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js"
  }

最后在终端,输入npm run build可以看到成功打包拉
打开dist目录下的main.js,可以看到打包后的内容:
build打包的mian.js
7、后续
为了能在浏览器显示,我们来安装webpack-dev-server来模拟一个服务器环境

npm i webpack-dev-server cross-env
---------------------------------------------------
 "build": "cross-env NODE_ENV=production webpack --config webpack.config.js",
 "dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js"

npm run dev,打开localhost:3000
结果如下,mian.js并不能展现网页布局在浏览器上
在这里插入图片描述
这时候需要在配置文件中加上htmlwebpackplugin,该插件将为你生成一个 HTML5 文件:打包输出文件夹dist/index.html

npm install --save-dev html-webpack-plugin
------------------------------------
plugins: [new HtmlWebpackPlugin()]

在这里插入图片描述
再次打开localhost:3000
在这里插入图片描述
注意css样式没有起作用,增加style-loader

style-loader:配合css-loader使用,以形式在html页面中插入css代码
`

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

在这里插入图片描述
大功告成!

在打包的时候有没有发现npm run dev与npm run build的区别:

webpack-dev-server,生成文件的都是在内存里,而npm run build生成文件是显示在硬盘目录里的,毕竟build里面是webpack命令拉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值