Giter Site home page Giter Site logo

jtodo's Introduction

Jtodo

(PS:不含vue的脚手架,webpack版本是4.X,vue2.X)写在前面,我决定自己来写这个小demo,因为对着别人的东西做的时候,发生了各种问题,非常痛苦,当然,与工作不一样,我不需要赶时间,所以,我可以慢慢做,同时用各种方式,不用当生产线上的工人。

新建文件vuetodo

文件目录 Jtodo
├─ dist
│ ├─ fonts
│ │ ├─ checked.svg
│ │ └─ unChecked.svg
│ ├─ bg.jpg
│ ├─ index.html
│ ├─ main.3efc9cf4.js
│ ├─ main.e647d16e.css
│ ├─ manifest.main.1ee16c22.js
│ └─ vendors.2c31e1e9.js
├─ src
│ ├─ assets
│ │ ├─ images
│ │ │ ├─ bg.jpg
│ │ │ ├─ checked.svg
│ │ │ └─ unChecked.svg
│ │ └─ styles
│ │ ├─ footer.styl
│ │ ├─ global.styl
│ │ ├─ style.styl
│ │ └─ test.css
│ ├─ todo
│ │ ├─ footer.jsx
│ │ ├─ header.vue
│ │ ├─ item.vue
│ │ ├─ tabs.vue
│ │ └─ todo.vue
│ ├─ app.vue
│ └─ index.js
├─ .babelrc ├─ package-lock.json
├─ package.json
├─ postcss.config.js
├─ README.md
└─ webpack.config.js

npm init -y
npm i webpack webpack-cli -D
npm i vue vue-loader
npm i css-loader vue-template-compiler
npm i postcss postcss-loader autoprefixer
npm i -D babel-loader @babel/core @babel/preset-env
npm i babel-plugin-transform-vue-jsx -D
npm i babel-helper-vue-jsx-merge-props babel-plugin-syntax-jsx -D
npm i babel-preset-env
。。。。。。。

这边就不全写了,package.json里面有详细的,npm install一下就行了,需要注意以下几个点

1:vue-loader需要css-loader vue-template-compiler,css-loader又需要style-loader

2:Vue Loader 的配置和其它的 loader 不太一样。除了通过一条规则将 vue-loader 应用到所有扩展名为 .vue 的文件上之外,请确保在你的 webpack 配置中添加 Vue Loader 的插件:

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  module: {
    rules: [
      // ... 其它规则
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    // 请确保引入这个插件!
    new VueLoaderPlugin()
  ]
}

这个插件是必须的! 它的职责是将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块。例如,如果你有一条匹配 /.js$/ 的规则,那么它会应用到 .vue 文件里的 <script> 块。

一个更完整的 webpack 配置示例看起来像这样:

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      // 它会应用到普通的 `.js` 文件
      // 以及 `.vue` 文件中的 `<script>` 块
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      // 它会应用到普通的 `.css` 文件
      // 以及 `.vue` 文件中的 `<style>` 块
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ]
      }
    ]
  },
  plugins: [
    // 请确保引入这个插件来施展魔法
    new VueLoaderPlugin()
  ]
}

实际上我测试也是有问题的,下面说一下

style-loader是作为顶层的loader来渲染到dom上的,这也就意味着,尽量在处理css或者预编译的loader的顶层上加上style-loader。为此我们看一下webpack的英文官网,一定要是英文!!!

关于style-loader的:

Inject CSS into the DOM(css注入到DOM中)

To begin, you'll need to install style-loader:(导入,这要是看不懂,亲,建议这边回家种红薯)

It's recommended to combine style-loader with the css-loader(推荐这两玩意结合起来用,两粒一起嚼起来才最佳)

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

你看,webpack,处理css-loader就会加上style-loader,vue-loader处理 .vue文件中内部的<style>样式块,只在加了vue-style-loader,可我在测试中 .vue中内部样式就是不生效,额外加了style-loader药到病除,下面黑魔法来了,等我demo做完了,我就不信邪,我又去掉了style-loader,好像有可以显示样式了,说实话,我本是无神论者,现在我相信了,科学的尽头就是玄学。也可能是误操作,菜才能解释这一切。

然后简单说一下剩下的loader,可能会漏,漏掉的就去找英文文档,英文的,就是那种看着难受的,看懂了很爽的。

babel=》这个需要三个,loader、core、env(加载器,核心,环境),可能处理jsx文件还需要相关的插件,注意@和没@的区别,我看好像版本的问题,具体还是要查,webpack的3和4我感觉属于大版本更新,废弃和启用的差别大。

postcss-loader=》搭配postcss,他们的关系我觉得就是vue和vue-loader的关系。这个用来处理css,比如加浏览器前缀,,利用hash值来达到长缓存。

处理图片的比如url-loader和file-loader的就不说了,还有svg的

插件:

这个在demo用的不多,我就举几个我用到的

clean-webpack-plugin=》这个是好东西,打包的时候,清除上一次dist里面的文件

html-webpack-plugin=》生成一个html当根

mini-css-extract-plugin=》webpack4.X,需要这个插件来提取css样式的。

webpack里面的

config.optimization.splitChunks这个玩意可以拆包,为了稳定性,我们对于第三方类库几乎不更新,为了长缓存,我们需要把业务代码与第三方类库的代码剥离开来。

hash,入口文件,整个文件的hash,一旦有个文件改变,值也变,没缓存意义

chunkhash,统一模块的hash值,同上

contenthash,文件内容一样,hash值不一样

最后写README,md的时候,我在ie下跑代码的时候,发现不能运行,我傻了,我忘了babel也要配置,不想配置了,正常人谁会用ie?而且,作为webpack核心功能之一,这转移很完善,坑不多

总结:没啥业务,算是过了一遍vue基本语法,模板,事件绑定,父子组件通信的props和$emit,手撕了webpack最最最基础的东西,基本走了一遍上线的流程。(最简单的那种)现在前端工程化,模块化,我接触有点晚了,慢慢来吧,更新过快是坏事,也是好事。听说vite有丶好用,但是webpack开发者会心一笑。。。。。。

jtodo's People

Contributors

jiabing-china avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.