博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack -> vue Component 从入门到放弃(四)
阅读量:5869 次
发布时间:2019-06-19

本文共 4673 字,大约阅读时间需要 15 分钟。

Foreword

之前三篇大致介绍了webpack的用法,正如这个系列标题而言 从webpack 到 vue Component,所以最后一篇文章当然是要讲 component, 不对应该说是结合使用,所以看官要是对 vue Component不是很了解的话,先去瞅瞅吧

Gabby

vue 官网对组件的介绍其实不少了,但是我第一次看 vue单文件组件 的介绍的时候,一阵不明觉厉之风刮的我找不到北。

  • 全局定义(Global definitions) 强制要求每个 component 中的命名不得重复

  • 字符串模板(String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \

  • 不支持CSS(No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏

  • 没有构建步骤(No build step) 限制只能使用 HTML 和 ES5 JavaScript, 而不能使用预处理器,如 Pug (formerly Jade) 和 Babel

这些缺点就促使了我们要使用 vue 单文件组件了,(看到这里,我心里有股莫名的高兴!!!)

然而,NM-MMP 后面就贴上了简单的 demo 图片(居然还只是图片),然后后面就说 “有了 .vue 组件,我们就进入了高级 JavaScript 应用领域” 是不是很牛掰终于可以摆脱菜鸟的衣服了,但是,但是,但是,如果你不知道 Modern JavaScript with ES2015/16,不知道打包工具 webpack/Browserify,不知道 Node Package Manager (NPM),好,很好,非常好,亲,你还没有准备好,请去啃一遍这些再来。。。。。

除了想撞墙我当时没有其他想法(幸好只是没用过webpack。。。)

Here we go

先展示一下文件目录结构:

  • node_modules

  • src

    • main.js

    • components

      • app.vue

      • second.vue

  • .babelrc

  • index.html

  • package.json

  • webpack.config.js

先把相关的依赖给装好(注意一下注释只是为了解释,在package.json中不能写注释)

"devDependencies": {    "babel-core": "^6.0.0", //babel 插件    "babel-loader": "^6.0.0", //babel-loader 加载器    "babel-preset-es2015": "^6.0.0", //babel预编译es2015/es6语法    "cross-env": "^3.0.0", //跨平台环境用来设置NODE-ENV    "css-loader": "^0.25.0",    "file-loader": "^0.9.0",    "node-sass": "^4.5.0",    "sass-loader": "^5.0.1",    "vue": "^2.2.4",    "vue-loader": "^10.0.0",    "vue-template-compiler": "^2.1.0",    "css-loader": "^0.26.2",    "style-loader": "^0.13.2",    "webpack": "^2.2.1",    "webpack-dev-server": "^2.4.1"  }//命令行(CLI)安装cnpm install

.babelrc

//预编译es6语法的配置{  "presets": [    ["es2015", { "modules": false }]  ]}

webpack.config.js

// var webpack = require('webpack')var path = require('path')// NodeJS中的Path对象,用于处理目录的对象,提高开发效率。module.exports = {  // 入口文件地址,不需要写完,会自动查找  entry: './src/main.js',  output: {     // 文件地址,使用绝对路径形式    path: path.resolve(__dirname, './dist'),    //[name]这里是webpack提供的根据路口文件自动生成的名字    publicPath: '/dist/',    filename: '[name].js'  },  module: {    loaders: [      // 解析.vue文件      {        test: /\.vue$/,         loader: 'vue-loader',        options: {          //解析.vue文件中样式表          loaders: {            // Since sass-loader (weirdly) has SCSS as its default parse mode, we map            // the "scss" and "sass" values for the lang attribute to the right configs here.            // other preprocessors should work out of the box, no loader config like this necessary.            'scss': 'vue-style-loader!css-loader!sass-loader',            'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'          }          // other vue-loader options go here        }      },      // 转化ES6的语法      {        test: /\.js$/,        loader: 'babel-loader',        exclude: /node_modules/      },      //编译css并自动添加css前缀      {         test: /\.css$/,         loader: 'style!css!autoprefixer'      },      //图片加上base64编码      {        test: /\.(png|jpg|gif|svg)$/,        loader: 'file-loader',        options: {          name: '[name].[ext]?[hash]'        }      }    ]  },  resolve: {    // 别名,可以直接使用别名来代表设定的路径以及其他,在这个项目中没用到    alias: {      'vue$': 'vue/dist/vue.common.js'    }  },   // 服务器配置相关  devServer: {    historyApiFallback: true,    noInfo: true  },  performance: {    hints: false  },  // 开启source-map,webpack有多种source-map,在官网文档可以查到 eval-source-map 不能实现断电调试, source-map 和 cheap-module-source-map 就没问题  devtool: '#eval-source-map'}

src/main.js

//es6语法:import Vue from "vue"//外部引入别的库都可以用这样的方式,比如jquery等。。//引入我们编写的测试用vue文件。import App from './components/app.vue';                                     new Vue({    el:'#app',    render: h => h(App)})//vue 里有关于 render 的介绍,我大概简要介绍一下这里的用途,h 是 vue 生态系统中作为 createElement 别名的通用惯例 也是 JSX 语法的要求。如果在作用域中 h 失去作用, 在应用中会触发报错。//render 所创建的 h 函数 可以直接返回模板中dom元素,相当于render: function(h){    return h(App)}//个人觉得由于这里的App 是代表的 app.vue 这个组件文件,那么文件中的 
标签中的 dom 元素将自动被拿来返回,当然还包括文件中的data属性之类的

src/components/second.vue

// scoped 让css只在这文件中生效 lang='scss' 不能写成 sass 打包会报错

src/components/app.vue

index.html

            
//这是打包生成的main文件

Last step 更改 package.json

// 在 scripts 中加入 dev 之后直接通过 npm运行 项目中装的 webpack-dev-server,而不是使用全局的 webpack-dev-server "scripts": {    "dev": "cross-env NODE_ENV=development webpack-dev-server --hot --inline --progress --color --port 80"  }

运行(CIL)

npm run dev

ps:

如果想让他自动打开默认浏览器 再 选项 "dev" webpack-dev-server 后面加个 --open

--hot 与 --line 区别

// 不会刷新浏览器$ webpack-dev-server//刷新浏览器$ webpack-dev-server --inline//重新加载改变的部分,HRM(热替换)失败则刷新页面$ webpack-dev-server  --inline --hot

Final

打开浏览器看看效果。这系列文章就全部结束,最后一篇间隔稍微长了点,不过还是没夭折~~~

转载地址:http://iaxnx.baihongyu.com/

你可能感兴趣的文章
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
northropgrumman
查看>>
关于链接文件的探讨
查看>>
android app启动过程(转)
查看>>
Linux—源码包安装
查看>>
JDK8中ArrayList的工作原理剖析
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>