旧多页应用项目的重构

一些感叹

利用最近本身写的一个针对多页应用而写的脚手架,对本身第一个写的项目进行重构。哈哈,那个时候刚入门前端,还不知道有webpack这种东西,写的是那种最最古老的Bootstrap + jquery项目,那时还不懂什么是打包... 通过半年来的学习,成长到如今,回头看看本身第一次的项目,还真是惨不忍睹啊~ 好吧,不啰嗦了,开始吧。javascript

看看项目目录结构

先看看之前这个项目长什么样子....css

css ————
      | —— introduction.css
      | —— index.css
      | —— owl.carousel.min.css
js  ————
      | —— initIntro.js
      | —— initScroller.js
      | —— index.js
      | —— iscroll-probe.js
      | —— owl.carousel.min.js
img ————
      .........
index.html
introduction.html

一共就只有2个页面,一个主页index和一个详情介绍页introduction。 看着这个目录结构此刻的心情(/ω\)html

  1. 首先第三方库的css和js文件应该集中放在一个lib文件夹下。把业务相关的东西和无关的东西分开
  2. 页面和其相关的css和js应该都集中在一个文件夹中,把页面看做一个模块。在后期的维护才会更加方便,起码你不用在一众多的js文件中寻找你所要的。

开始

目录的改进

  • 先在这里下载这个脚手架。npm install安装全部依赖后-
  • 执行npm run create index introduction 建立2个目录,把旧项目的文件拷到对应文件夹,并按照上述内容,把第三方库都放在一个lib文件夹下。并把images文件夹存放在src/static下。
  • 通过一番重命名后,感受本身那时文件的名字取的确实是有点那啥.... 不过这也显得本身有所成长吧。
  • 如今的目录结构前端

    static           //    静态资源的存放
    | ———— imgs
    
    src 
    | ———— views
    |        | ———— index
    |        |        | ———— index.html
    |        |        | ———— index.css
    |        |        | ———— index.js
    |        |        | ———— initScroller.js
    |        | ———— introduction
    |                 | ———— index.html
    |                 | ———— index.css
    |                 | ———— index.js
    | ———— lib
            | ———— owl.carousel.min.css
            | ———— owl.carousel.min.js
            | ———— iscroll-probe.js

jscss的引入

  • 旧项目大部分都是使用<script>标签引入脚本,用<link>引入样式。同时这个旧项目也有用到bootcss的cdn。这里仍是比较推荐使用cdn的,毕竟能够减小打包后文件的大小。cdn引入相信你们都会,就不说了。
  • 使用import去引入相关的jscss文件,脚手架已集成了各类loader。
  • 对于一些不支持CommonJS的第三方库,要么你去改造它,要么只好直接用<script>引入吧(尽管很不肯意)
  • 目录结构的更改,全部的路径引用确定都已经出错了。这些就自行去修复吧。
  • 这个例子里,咱们不用cdn 咱们经过npm安装JQueryBootstrap,可是v3版本不支持模块化,那么咱们趁此机会入坑v4-beta

入坑JQueryBootstrap v4

Bootstrap-v4 官方文档java

npm install jquery
npm install popper.js
npm install bootstrap@4.0.0-beta

官方文档中有用到webpack.ProvidePlugin,使用它就能够自动加载模块,不须要手动的在每一个js文件前importrequire引入
并且还须要用到export-loader(ε=(´ο`*)))唉 好麻烦呐),官方文档要求,若是咱们要按需引入组件的时候就须要借助export-loader去帮咱们在组件的js代码中去添加module.exports = ...这样才能实现按需引入。jquery

npm install export-loader -D

而后在咱们的webpack.dev.conf.jswebpack.prod.conf.js中的Plugin:[]中添加下面的代码webpack

new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  'window.jQuery': 'jquery',
  Popper: ['popper.js', 'default'],
  // In case you imported plugins individually, you must also require them here:
  Util: "exports-loader?Util!bootstrap/js/dist/util",
  Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown",
})

这里就会发现devprod有重复的部分了。而且咱们之后每引入一个组件就必须在这里添加相似的一行代码
Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown",因此就颇有必要去写一些函数去处理这些状况。git

首先在build中建立bootstrap-components.js文件,主要用于批量生成bootstrap组件的配置。
注意: 以后添加组件的时候只须要在这里添加便可!!github

let components = [
  'Util',
  'Dropdown',
];

module.exports = (function (){
  let o = {};
  for(let name of components) {
    o[name] = `exports-loader?${name}!bootstrap/js/dist/${name.toLowerCase()}`
  }
  return o;
})();

以后在utils.js中增长这些代码,用于生成providerPlugin的配置。web

var webpack = require('webpack')
var components = require('./bootstrap-components')

exports.genProviderPlugin = function () {
  return new webpack.ProvidePlugin(Object.assign({
    $: 'jquery',
    jQuery: 'jquery',
    'window.jQuery': 'jquery',
    Popper: ['popper.js', 'default'],
  }, components));
}

最后只须要分别在webpack.dev.conf.jswebpack.prod.conf.js中的plugins: []中添加
utils.genProviderPlugin()便可。

至此,便完成了bootstrap-v4.0的配置,可是v4和v3之间存在很大的差异,有许多的样式须要去更改~

结束

这篇文章主要是以本身的第一个烂项目做为例子,经过项目目录结构页面模块化更新框架这三个方面进行了一波重构,让老旧项目也能够享受现代Web的开发模式。

相关文章
相关标签/搜索