利用最近本身写的一个针对多页应用而写的脚手架,对本身第一个写的项目进行重构。哈哈,那个时候刚入门前端,还不知道有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
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
js
、css
的引入<script>
标签引入脚本,用<link>
引入样式。同时这个旧项目也有用到bootcss的cdn
。这里仍是比较推荐使用cdn
的,毕竟能够减小打包后文件的大小。cdn
引入相信你们都会,就不说了。import
去引入相关的js
和css
文件,脚手架已集成了各类loader。CommonJS
的第三方库,要么你去改造它,要么只好直接用<script>
引入吧(尽管很不肯意)cdn
咱们经过npm
安装JQuery
和Bootstrap
,可是v3
版本不支持模块化,那么咱们趁此机会入坑v4-beta
吧JQuery
和Bootstrap v4
npm install jquery npm install popper.js npm install bootstrap@4.0.0-beta
官方文档中有用到webpack.ProvidePlugin,使用它就能够自动加载模块,不须要手动的在每一个js
文件前import
或require
引入
并且还须要用到export-loader(ε=(´ο`*)))唉 好麻烦呐),官方文档要求,若是咱们要按需引入组件的时候就须要借助export-loader
去帮咱们在组件的js代码中去添加module.exports = ...
这样才能实现按需引入。jquery
npm install export-loader -D
而后在咱们的webpack.dev.conf.js
和webpack.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", })
这里就会发现dev
和prod
有重复的部分了。而且咱们之后每引入一个组件就必须在这里添加相似的一行代码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.js
和webpack.prod.conf.js
中的plugins: []
中添加utils.genProviderPlugin()
便可。
至此,便完成了bootstrap-v4.0
的配置,可是v4和v3之间存在很大的差异,有许多的样式须要去更改~
这篇文章主要是以本身的第一个烂项目做为例子,经过项目目录结构, 页面模块化,更新框架这三个方面进行了一波重构,让老旧项目也能够享受现代Web的开发模式。