• Vue + Webpack + Vue-loader 系列教程(2)相关配置篇


    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/

    使用预处理器

    在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用。vue-loader 允许你用其它的 Webpack 加载器去处理 Vue 组件一部分代码。它会根据 lang 属性自动用适当的加载器去处理。

    CSS

    例如,我们编译用 SASS 编译 <style> 标签:

    npm install sass-loader node-sass --save-dev
    
    <style lang="sass">
      /* 这里写一些 sass 代码 */
    </style>
    

    在引擎内,首先,<style> 标签内的内容会被 sass-loader 编译,然后再被进一步处理。

    JavaScript

    默认情况下,Vue 组件内的所有 JavaScript 会被 babel-loader 处理。当然,你也可以更改:

    npm install coffee-loader --save-dev
    
    <script lang="coffee">
      # 这里写一些 coffeescript!
    </script>
    

    Templates

    处理模板的过程有点不同,因为大多 Webpack 模板加载器(比如 jade-loader )会返回一个模板处理函数,而不是被编译过的 HTML 字符串。我们只要安装 jade ,而不是 jade-loader

    npm install jade --save-dev
    
    <template lang="jade">
    div
      h1 Hello world!
    </template>
    

    重要提示: 如果你使用 vue-loader@<8.2.0, 你也需要安装 template-html-loader.

    内联加载请求

    lang 属性上,你能使用 Webpack loader requests :

    <style lang="sass?outputStyle=expanded">
      /* use sass here with expanded output */
    </style>
    

    但是,注意这样只适用特定的 Webpack,并不兼容 Browserify 和 vueify如果你想让你的 Vue 组件发布成一个第三方组件的话,避免这样使用


    URL资源处理

    默认情况,vue-loader 是自动用 css-loader 和 Vue 组件编译器来处理样式和模板文件的。在处理过程中,所有的资源 URL 比如<img src="...">, background: url(...) 和 CSS @import 都是被当做依赖的模块来处理

    例如,url(./image.png) 被转译成 require('./image.png')

    <img src="../image.png">
    

    如上会被再转译成:

    createElement('img', { attrs: { src: require('../image.png') }})
    

    因为 .png 并不是个 JavaScript 文件,你需要配置 Webpack 使用 file-loader 或者 url-loader 处理它们。项目脚手架工具 vue-cli 也能帮你配置这些。

    这样做的好处是:

    1. file-loader 允许你指定在哪里复制和存放静态资源文件 ,以及用版本哈希值命名从而更好利用缓存。 这意味着,可以把图片放到 *.vue 文件旁边,可使用相对路径,而不需要担心发布时候的 URL。使用适当的配置,Webpack 在打包输出的时候,会自动把文件路径转为正确的 URL。

    2. url-loader 允许你内联 base-64 数据格式的URL资源,如果小于设定的阈值。这样可以减少 HTTP 请求小文件的数量。如果文件大于这个阈值。会自动it automatically falls back to file-loader.


    加载器高级配置

    若你想自定义载器的配置,不要 vue-loader 来推断。 或你只想覆盖加载器内置的配置。 那就这样做,在你 Webpack 配置文件里,添加一个 vue 块,并指定 loaders 选项:

    Webpack 1.x Example:

    // webpack.config.js
    module.exports = {
      // other options...
      module: {
        loaders: [
          {
            test: /.vue$/,
            loader: 'vue'
          }
        ]
      },
      // vue-loader 配置
      vue: {
        // ... 其他 vue 选项
        loaders: {
          // 用 coffee-loader 加载所有没有 "lang" 属性的 <script> 
          js: 'coffee',
          // 直接把 <template> 作为 HTML 字符串来加载,不需先用 vue-html-loader 处理。
          html: 'raw'
        }
      }
    }
    

    Webpack 2.x (^2.1.0-beta.25):

    module.exports = {
      // 其他选项...
      module: {
        // module.rules 是和版本1.x中的 module.loaders 是相同的
        rules: [
          {
            test: /.vue$/,
            loader: 'vue',
            // vue-loader 选项在这里配置
            options: {
              loaders: {
                // ...
              }
            }
          }
        ]
      }
    }
    

    这里是个实际的加载器配置高级用法的实例 提取组件内的 CSS 到单独文件


    提取CSS到单独文件

    如下是提取所有程序的 Vue 组件中的 CSS 到一个单独的 CSS 文件的配置:

    Webpack 1.x

    npm install extract-text-webpack-plugin --save-dev
    
    // webpack.config.js
    var ExtractTextPlugin = require("extract-text-webpack-plugin")
    
    module.exports = {
      // other options...
      module: {
        loaders: [
          {
            test: /.vue$/,
            loader: 'vue'
          },
        ]
      },
      vue: {
        loaders: {
          css: ExtractTextPlugin.extract("css"),
          // 你也能包含 <style lang="less"> 或其他语言
          less: ExtractTextPlugin.extract("css!less")
        }
      },
      plugins: [
        new ExtractTextPlugin("style.css")
      ]
    }
    

    Webpack 2.x (^2.1.0-beta.25)

    npm install extract-text-webpack-plugin@2.x --save-dev
    
    // webpack.config.js
    var ExtractTextPlugin = require("extract-text-webpack-plugin")
    
    module.exports = {
      // 其他选项...
      module: {
        rules: [
          {
            test: /.vue$/,
            loader: 'vue',
            options: {
              loaders: {
                css: ExtractTextPlugin.extract({
                  loader: 'css-loader',
                  fallbackLoader: 'vue-style-loader' // <- this is a dep of vue-loader, so no need to explicitly install if using npm3
                })
              }
            }
          }
        ]
      },
      plugins: [
        new ExtractTextPlugin("style.css")
      ]
    }
    
  • 相关阅读:
    paip. everything exe 文件不能启动的解决
    paip.输入法编程词频顺序order by py
    paip.最新的c++ qt5.1.1环境搭建跟hello world
    paip.mysql 5.6 数据库 占用 内存 过多 的 解决方案
    paip.win32的internet扩展已停止工作解决大法
    paip.输入法编程删除双字词简拼
    paip.输入法编程词频调整单字优先编码发音一致优先的问题跟调整
    paip.输入法编程带ord gudin去重复
    paip.php eclipse output echo 乱码
    paip.svn使用最佳实践
  • 原文地址:https://www.cnblogs.com/lvyongbo/p/5964501.html
Copyright © 2020-2023  润新知