【Vue】09 Webpack Part5 Vue组件化开发

摘要:
[Vue组件文件打包:Vue Loader]复制上一个项目并在src目录中创建App.Vue文件。此文件是Vue的模块文件。[建议从IDEA下载Vue.js插件]Vue的模块分为模板、脚本和样式,它们实际上代表html+javascript+css˂/

【Vue组件文件打包:Vue-Loader】

复制之前上一个项目

然后在我们的src目录中创建App.vue文件

这个文件就是Vue的模块文件

【建议下载IDEA的Vue.js插件】

Vue的模块分为template、script、style

其实就是代表html + javascript + css这三者

<template>
    <div>
        <span v-text="name" class="title"></span>
    </div>
</template>

<style scoped>
    .title {
        color : red;
    }
</style>

<script>
export default {
    data () {
        return {
            name : "来自App.vue组件的name属性值"
        }
    }
}
</script>

然后使用main.js导入组件文件

// 引入包的时候,像Java一样 使用import
import App from './App.vue';
let application = new Vue({
    el : "#application",
    data : {
        name : "阿伟"
    },
    render : e => e(App)
});

不出所料,webpack打包解析不了vue组件文件

【Vue】09 Webpack Part5 Vue组件化开发第1张

这就是前面提到的Loader的概念,我们对Vue组件文件也需要对应的加载器:

vue-loader,vue-template-compiler

npm install vue-loader vue-template-compiler --save-dev

【Vue】09 Webpack Part5 Vue组件化开发第2张

然后webpack.config.js配置:

const path = require('path');

module.exports = {
    entry : "./src/main.js", // 入口 可以是字符串,数组,对象
    output : { // 出口,通常是一个对象 至少包含路径和文件名
        path : path.resolve(__dirname, 'dist'),
        filename : "bundle.js"
    },
    module : {
        rules : [
            { test : /.css$/, use : ['style-loader', 'css-loader'] },
            { test : /.vue$/, use : ['vue-loader'] }
        ]
    },
    resolve : {
        alias : {
            'vue$' : 'vue/dist/vue.esm.js'
        }
    }
}

打包报错:

【Vue】09 Webpack Part5 Vue组件化开发第3张

大概是关于vue-loader版本的问题:

解决是先卸载安装的vue-loader,再重新指定版本安装:

npm uninstall vue-loader

【Vue】09 Webpack Part5 Vue组件化开发第4张

重新安装:

npm install vue-loader@13.3.0

【Vue】09 Webpack Part5 Vue组件化开发第5张

再次打包运行:

【Vue】09 Webpack Part5 Vue组件化开发第6张

【首页打包:HTMLWebpackPlugin】

目前的项目问题:

我们的index文件是存放在项目根目录下,并不是打包的目录,

但是实际项目发布的是使用dist目录,所以这个首页文件也需要打包进去

这需要HTMLWebpackPlugin插件

cnpm install html-webpack-plugin@2.16.0 --save-dev

 【Vue】09 Webpack Part5 Vue组件化开发第7张

配置webpack.config.js

const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry : "./src/main.js", // 入口 可以是字符串,数组,对象
    output : { // 出口,通常是一个对象 至少包含路径和文件名
        path : path.resolve(__dirname, 'dist'),
        filename : "bundle.js"
    },
    module : {
        rules : [
            { test : /.css$/, use : ['style-loader', 'css-loader'] },
            { test : /.vue$/, use : ['vue-loader'] }
        ]
    },
    resolve : {
        alias : {
            'vue$' : 'vue/dist/vue.esm.js'
        }
    },
    plugins : [
        new htmlWebpackPlugin({
            template : "index.html" //指定打包使用的html模版
        })
    ]
}

可以发现这里的首页自动打上了js文件导入

也就是说这是webpack帮我们写上的

【Vue】09 Webpack Part5 Vue组件化开发第8张

【JS文件压缩:uglifyjs-plugin】

但是还有一个问题就是我们需要对JS文件压缩处理

这就需要uglifyjs-webpack-plugin

npm install uglifyjs-webpack-plugin@1.1.1 --sav-dev

还是一样配置webpack.config.js

const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
const uglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
    entry : "./src/main.js", // 入口 可以是字符串,数组,对象
    output : { // 出口,通常是一个对象 至少包含路径和文件名
        path : path.resolve(__dirname, 'dist'),
        filename : "bundle.js"
    },
    module : {
        rules : [
            { test : /.css$/, use : ['style-loader', 'css-loader'] },
            { test : /.vue$/, use : ['vue-loader'] }
        ]
    },
    resolve : {
        alias : {
            'vue$' : 'vue/dist/vue.esm.js'
        }
    },
    plugins : [
        new htmlWebpackPlugin({
            template : "index.html" //指定打包使用的html模版
        }),
        new uglifyJsPlugin()
    ]
}

执行之后这个js文件就会压缩格式,可读性极差,

所以插件非常形象的命名为“丑陋化JS”

【Vue】09 Webpack Part5 Vue组件化开发第9张

【Webpack本地服务器搭建】

webpack提供了一个可选的本地开发服务器,基于NodeJS搭建

内部使用的是express框架,实现我们想要的让浏览器自动刷新的效果

npm install webpack-dev-server@2.9.1 --save-dev

配置package.js文件

{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev" : "webpack-dev-server --port 3000 --hot",
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^3.6.0",
    "html-webpack-plugin": "^2.16.0",
    "style-loader": "^1.2.1",
    "vue-template-compiler": "^2.6.11",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.11.5"
  },
  "dependencies": {
    "uglifyjs-webpack-plugin": "^1.1.1",
    "vue": "^2.6.11",
    "vue-loader": "^13.3.0"
  }
}

输入此命令运行项目:

npm run dev

【Vue】09 Webpack Part5 Vue组件化开发第10张

访问正常:

【Vue】09 Webpack Part5 Vue组件化开发第11张

免责声明:文章转载自《【Vue】09 Webpack Part5 Vue组件化开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[LeetCode] 1026. Maximum Difference Between Node and Ancestormac 下如何轻松安装神器 Anaconda下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue组件之属性Props

组件的属性和事件 父子组件之间的通信 父子组件之间的通信就是 props down,events up,父组件通过 属性props向下传递数据给子组件,子组件通过 事件events 给父组件发送消息。比如,子组件需要某个数据,就在内部定义一个prop属性,然后父组件就像给html元素指定特性值一样,把自己的data属性传递给子组件的这个属性。而当子组件内部...

Vue 监听---&amp;gt;watch

关于Vue的监听:watch watch是对单个属性的监听 对于基本数据类型的监听       简单监视 对于复杂数据类型的监听       深度监视 下面的代码,有一个简单监视  和 一个深度监视 <body> <div id="app"> <input type="text" v-model='ms...

vue中detele删除对象属性时视图不能响应更新

如下代码片段 // js obj = { a: 123, b: 223, c: 323 } // html <li v-for="item in obj">{{ item }}</li> 此时若在methods中使用 delete this.obj.a 或者 delete this.obj["a"]会发现视图中...

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

说明:这里使用的是webpack: "^5.9.0",webpack-cli: "^4.2.0",webpack-dev-server: "^3.11.0" 问题1:通过 npx webpack-dev-server 启动项目失败,报错:Error: Cannot find module 'webpack-cli/bin/config-yargs' 解决...

vue基本使用及脚手架使用

一、基本使用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">...

使用webpack搭建vue开发环境

最近几天项目上使用了vue.js作为一个主要的开发框架,并且为了发布的方便搭配了webpack一起使用。CSS框架使用的是vue-strap(vue 对bootstrap控件做了封装)这篇文章主要总结一下具体搭建的过程,和途中遇到的一些问题的解决办法 主要用到的工具 Vue webpack vue-strap vue-router 搭建步骤 1. 首先...