IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 04 webpack3配置从0到1搭建vue工程 -> 正文阅读

[JavaScript知识库]04 webpack3配置从0到1搭建vue工程

一.webpack配置Vue工程

1.webpack配置文件拆分

2.vue-loader.config.js配置

vue-loader.config.js完整配置

// vue-loader的配置项非常多故单独抽离出来
// 根据不同的环境做不同的处理

const docsLoader = require.resolve('./doc-loader.js')

module.exports = (isDev) => {
  return {
    preserveWhitepace: true,  // 去掉vue template html中的空格
    // extractCSS: true, // 前面抽离css 发现vue的样式没有抽离出来 默认是不会单独抽离出来 设置true是可以抽离
    extractCSS: !isDev, //!isDev正式环境   把vue的css打包到单独的css文件中,提高首屏加载速度, 但其实不加也把vue中的css也打包进去了。。
    cssModules: { //针对vue文件css样式的类生成一个带路劲和名字的hash值
      localIdentName: '[path]-[name]-[hash:base64:8]',
      camelCase: true // 如.main-box 改成.mainBox的作用  javascript是不能使用这样的变量名main-box 故需要改成mainBox
    },
    // 常规Vue项目下以下配置基本不会使用
    // hotReload: false, // 热重载默认根据环境变量生成 production热重载关闭 development热关闭 修改template的内容  热重载的意思是不刷新浏览器改变页面
    // loaders: {// 自定义模块在.vue  <docs></docs> 作用是构建组件库的时候 写我们的文档如案例 
    //   'docs': 'docsLoader',
    // },
    // preLoader: {}, // 在解析js时 在bael-loader之前先用preLoader解析js 然后再由bael-loader解析
    // postLoader: {}, // 同理


  }
}

2.1 抽离vue 中的样式

const createVueLoaderOptions = require('./vue-loader.config')

module: {
    rules: [
      {
        test: /\.vue$/,  // .需要通过\转义
        loader: 'vue-loader', // 自动加载模块功能
        options: createVueLoaderOptions(isDev) //使用vue-loader.config.js
      }
    ]
  },

2.2 vue-style-loader? 样式热更替(不刷新浏览器) 根据环境变量判断是否开启

rules: [
        {
          // test: /\.styl$/,  // 这样配置会有个错误Module parse failed: Unexpected character '#',使用下面配置处理
          test: /.styl(us)?$/,
          use: [
            // 'style-loader',
            'vue-style-loader', // 能监听到vue文件中的样式变化 然后热重载
            // 'css-loader',
            { // 不生效
              loader: 'css-loader',
              options: {
                modules: true,
                // 自定义生成的类名
                localIdentName: '[local]_[hash:base64:8]'
              }
            },
            {
              loader: 'postcss-loader', // 添加postcss.config.js , webkit前缀
              options: {
                souerMap: true, // 可直接使用前面的souerMap,提高编译效率
              }
            },
            'stylus-loader'  //stylus-loader解析后是css   webpack的loader 就是一层一层的往上传递
          ]
        },
      ]

2.3? 每次打包删除dist 文件

"clean": "rimraf dist"

npm run clean

2.4 cssMoudles的作用是在当前组件才能调用使用,其他组件不能使用

好处是:不会有class命名空间的冲突,定位class的名称保密性还好, 比scope性能更好

?vue文件中使用:

配置:

cssModules: { //针对vue文件css样式的类生成一个带路劲和名字的hash值
      localIdentName: '[path]-[name]-[hash:base64:8]',
      camelCase: true // 如.main-box 改成.mainBox的作用  javascript是不能使用这样的变量名main-box 故需要改成mainBox
    },

使用:

<template>
  <header :class="$style.mainHeader"> // $style.mainHeader这样的写法
    <h1>Todo</h1>
    <!-- <h1 :class="$style.red">123</h1> -->
  </header>
</template>

类似于生成
<script>
computed: {
  $style() {
    return {
      mainHeader
    }
  }
}
</script>

<style lang="stylus" module> // moudle是必须的
.main-header{
  text-align center
  color: pink;
  h1{
    font-size 100px
    color rgba(175,47,47,0.4)
    font-weight 400
    margin 20px
  }
}
</style>

?jsx文件中使用:

配置:

module: {
      rules: [
        {
          // test: /\.styl$/,  // 这样配置会有个错误Module parse failed: Unexpected character '#',使用下面配置处理
          test: /.styl(us)?$/,
          use: [
            // 'style-loader',
            'vue-style-loader', // 能监听到vue文件中的样式变化 然后热重载
            // 'css-loader',
            { // 不生效
              loader: 'css-loader',
              options: {
                modules: true,
                // 自定义生成的类名
                localIdentName: '[local]_[hash:base64:8]'
              }
            },
            {
              loader: 'postcss-loader', // 添加postcss.config.js , webkit前缀
              options: {
                souerMap: true, // 可直接使用前面的souerMap,提高编译效率
              }
            },
            'stylus-loader'  //stylus-loader解析后是css   webpack的loader 就是一层一层的往上传递
          ]
        },
      ]
    },

?使用:

// cssmoudles不生效 请检查css-loader的版本
import className from "../assets/styles/footer.styl";

export default {
  data() {
    return {
      author: "cookie",
      list: [1, 2],
    };
  },
  render() {
    return (
      <div id={className.footer}>
        {/* <div id="footer"> <div id={className.footer}> */}
        <span>jsx 语法 {this.author}</span>
      </div>
    );
  },
};

效果图:

?3.eslit 配置

好处是:避免一些低级的错误,团队合作保持同种风格

3.1 安装依赖(我们使用最近流行的standard)

"eslint": "^4.16.0",
    "eslint-config-standard": "^11.0.0-beta.0",
    "eslint-plugin-html": "^4.0.1", //eslint不能识别vue中的<script>内的代码,故需按照这个
    "eslint-plugin-import": "^2.8.0",
    "eslint-plugin-node": "^5.2.1",
    "eslint-plugin-promise": "^3.6.0",
    "eslint-plugin-standard": "^3.0.1",
    "eslint-loader": "^1.9.0",

?3.2 配置与使用

配置:新建.eslintrc

{
  "extends": "standard",
  "plugins": ["html"],
  "rules": {
    "no-new": "off",
    "no-unused-vars": "off"
  }
}

?packjson中配置:

"lint": "eslint --ext .js --ext .jsx --ext .vue client/", //--ext检测那些后缀名的文件,及那个文件夹
"lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue client/ practice/", // eslit 修复



使用npm run lint

?3.3??改了代码马上做eslint的检查

我们希望改了代码马上做eslint的检查,能马上定位问题,也能规范我们写的代码

1.在eslint.src配置

"parser": "babel-eslint", // babel处理的语法可能对eslint有影响

?2.在webpack.config.base.js配置

rules: [
      {
        test: /\.(vue|js|jsx)$/,
        loader: 'eslint-loader',
        exclude: /node_modules/,
        enforce: 'pre' //elist只是代码检测,当然是不能默认处理.vue文件 预处理在vue-loader之前处理,即预处理当然也有后处理
      }
    ]

3.4 editorconfig 规范不同的编辑器的默认配置

需要在vscode中安装插件?EditorConfig for VS Code

在编辑项目使用相同的配置,新建.editorconfig

root = true // 这个项目读到这层就可以了 不再往上层目录搜索

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true // 文件最后自动最后添加空行
trim_trailing_whitespace = true // 删除末尾的空格

?4.项目中git配置

git commit之前自动进行eslint检查代码,不通过eslit检查则不会提交代码

1.一定先要git init初始化代码仓库

2. npm i? husky -D

packjson中配置:"precommit": "npm run lint",? //检测代码??"npm run lint-fix"? 修复代码

不通过代码检查则不会提交

?以上的配置都是一劳永逸的希望在你们的项目都先配置好

5. 运行项目

5.1 index.js 程序入口修改:

// const root = document.createElement('div')
// document.body.appendChild(root) // root 节点需要创建

// new Vue({
//   render: (h) => h(App) // h 是vue中的createApp
// }).$mount(root) // $mount把我们的app 挂载到我们的html的root节点下

new Vue({
  render: (h) => h(App) // h 是vue中的createApp
}).$mount('#root') //就不需要向上面一样创建节点root 获取template.html中的root节点,并且新建template.html,在webpack配置

5.2?新建template.html

<body>
  <div id="root"></div>
</body>

5.3?webpack.config.client.js 配置template.html

  new HTMLPlugin({
    template: path.join(__dirname, "./template.html"), // 指定模板页面 以根据指定页面生成内存中的页面
    filename: "index.html" // 指定生成的内存中的页面的名称
  }),

源码链接:?https://gitee.com/zhangcookie/webpack4_vue_ssr_todo-list.git

?

二.你可能遇到的问题

1.

解决方法是: cnpm i??@babel/preset-env

2.您可能需要适当的加载程序来处理此文件类型。

?解决方法是:?

const VueLoaderPlugin = require('vue-loader/lib/plugin');


//在插件中配置
new VueLoaderPlugin(),

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:43:07  更:2022-07-20 18:44:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:32:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码