远程仓库建立
码云创建组织项目
git clone ssh
切换到主分支mmall-fe后git remote add origin ssh
git pull origin master把master分支拉下来
建立git的忽略规则
git checkout -b xx_v1.0表示创建并切换分支
建立一个scr文件夹,里面建立view、page、service、util、image的文件夹
测试
创建文件
git init
git status
git add .
git commit -am '测试'
git push
webpack和npm安装使用
$ npm init
$ npm install webpack@1.15.0 --save-dev
$ webpack ./src/page/index/index.js ./dist/app.js
根目录下创建一个webpack.config.js更改固定内容
webpack对脚本样式处理
$ npm install css-loader style-loader --save-dev
$ npm install extract-text-webpack-plugin@1.0.1 --save-dev
$ npm install html-webpack-plugin --save-dev
$ npm install html-loader --save-dev
$ npm install url-loader --save-dev
webpack-dev-server的启用
$npm install webpack-dev-server@1.16.5
$npm install webpack-dev-server -g
执行webpack-dev-server得到可以打开的地址
$ webpack-dev-server --inline --port 8088
在package.json中简化命令
$npm run dev_win
、《Webpack深入与实战》
第一章 webpack基本介绍
1.1 webpack基本介绍
webpack是前端打包工具
将js、css等文件视为一个模块,将外部或者第三方文件也视为一个模块,实现按需加载;使浏览器能够在最短时间打开项目;有一个代码分割的特性;使用loader处理样式、图片、字体等;适合大型项目操作;具有模块热更新功能;官网教程齐全。
1.2 webpack安装与命令行
1、安装: (1)进入指定目录 (2)新建文件夹:终端输入:mkdir webpack-test (3)进入文件夹:终端输入:cd webpack-test (4)文件夹下初始化npm:终端输入:npm init 出现package.json (5)全局装webpack:终端输入:npm install webpack -g (注:第一次运行webpack项目时,如果没有这一步,而直接执行下一步的话,会提示错误:webpack: command not found) (6)文件夹中装webpack:终端输入:npm install webpack --save-dev 出现 (参数-g的含义是代表安装到全局环境里面,参数--save-dev的含义是代表把你的安装包信息写入package.json文件的devDependencies字段中。) 2、项目操作 (1)用编辑器打开当前目录:终端输入:atom ./ (视频中老师用的编辑器是atom) (2)编辑器中:新建一个目录,命名为hello.js (3)webpack打包:终端输入:webpack hello.js hello.bundle.js(前面是要打包的文件名字,后面是打包后的文件名字) asset下是这次打包生成的文件,chunks这次打包的分块,chunk Names这次打包的块名称。 3、webpack支持的三种模块化方式:md,commonJs, es6. require(‘.world.js’)的写法是commonJs的 4、webpack天生不支持css类型的文件,如果要处理这种文件,就要依赖Loader. 5、安装loader (1)终端项目目录输入:npm install css-loader style-loader --save-dev (2)require('style-loader!css-loader!./style.css');表示引用文件之前,要引入loader
6、每个css文件都要写sloader的话很麻烦,可以通过环境配置来避免这些重复的输入: 终端项目目录输入:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' (aSuncat: css-loader后面不要加!,mac下是单引号'',windows是双引号"") 7、每次修改文件,都要重新输入命令,让文件自动更新,自动打包,可以用--watch的参数 终端项目目录输入:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' --watch 8、打包过程的progress 终端输入:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' --progress 9、引用的模块 终端项目目录输入:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' --progress --display-modules 10、为什么打包模块的原因 终端项目目录输入:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader' --progress --display-modules --display-reasons
第二章 webpack基本配置
2.1 建立项目的webpack配置文件
一、创建代码源文件目录:终端输入:mkdir src. 创建代码打包过以后的静态资源目录:终端输入:mkdir dist. 二、配置文件 ① 配置文件是默认的文件名(webpack.config.js) 1. 在文件的根目录下创建webpack.config.js文件 2. 配置参数 var path = require('path'); module.exports = { entry:'./src/script/main.js',//打包的入口 output:{ path: path.resolve(__dirname, 'dist/js'),//打包后的存放路径 (绝对路径) filename:'bundle.js'//打包后的文件名 } } 3. 在命令行 中运行:webpack ② 配置文件不是默认的文件名 1. 比如配置文件的文件名为webpack.dev.config.js 2. 在命令行中运行时:webpack --config webpack.dev.config.js 三、设置webpack参数 1. 在npm脚本文件package.json文件中设置 2. 在scripts中添加:"webpack":"webpack --config webpack.config.js --progress --display-modules --colors --display-reasons",webpack即可替代后面代码。
2.2 webpack配置文件的entry和output new
webpack的三种用法 1.直接命令行使用。如果是直接打包就是webpack文件名和打包后的文件名,加上打包原因等这一类的自己所需要的命令。如果是css打包就再加上css-loader。 2.node.js API的使用方式。 3.webpack —config webpack.config.js 一、entry 1、三种输入方式 (1)string,输入字符串 entry:{ main:'./src/script/main.js' }, (2)array, 数组。适用情况:两个平行的,不相依赖的文件打包在一起。 entry:{ main:['./src/script/main.js','./src/script/a.js'] }, (3)object, 适用情况:多页面应用程序。这里要和output里的[name]占位符配合使用,威力才能最大。如果你要打包成多个js文件,那么entry对象里的key叫做chunk就是文件名,里面的值就是需要打包的文件里面包含的文件。 entry:{ main:'./src/script/main.js', a:'./src/script/a.js' }, 二、output 1、占位符有3种:[name]、[hash]、[chunkhash] 2、output的filename (1)hash: 这次打包的hash 每次终端运行webpack命令,都会生成一段信息,这段信息的第一行就有一个hash (2)chunkhash:每一个chunk自己的hash 3、output的path,//这里配置的是输出的文件地址
第三章 生成项目中的HTML页面文件
3.1 自动化生成项目中的HTML页面(上)
html中引入script,如果是hash或者chunkhash生成的js,则src每次都要修改,避免修改的方法就是用webpack的插件: 1、安装webpack插件: 终端项目目录输入:npm install html-webpack-plugin --save-dev 2、配置文件中建立对插件的引用 webpack.config.js中 (1)引用插件 var htmlWebpackPlugin=require('htmll-webpack-plugin'); (2)以index.html为模板 设置plugins:[ new htmlWebpackPlugin()// 初始化插件 ] 这里的代码只会让webpack自动生成一个index.html,里面自动把js代码插入到index.html当中。//注意,这里说的是webpack生成的index.html,不是你自定义的index.html。 要想让生成的index.html是自定义的,那么就要设置 plugins:[ new htmlWebpackPlugin({ template: ‘index.html’,//这里的index.html就是根目录下的index.html文件,是你自己写的文件。 filename: ‘index-[hash].html’,//这里指定的是生成的文件的名字 inject: 'body’,// 这里可以指定js文件是放在head还是body标签里面具体还可以放哪,请看文档说明。https://github.com/jantimon/html-webpack-plugin#configuration })// 初始化插件 ] (4)webpack使用插件的地址是根据配置里的context,上下文来决定的。 (5)文件生成在dist下,而不是一直在js下 output:{ path:path.resolve(__dirname,'./dist'), filename:'js/[name]-[chunkhash].js'//js文件生成到js文件夹中 },
3.2 自动化生成项目中的HTML页面(中)
一、参数中传参,模板中引用 config中的title设置,然后对index.html中用<%= %>进行取值 <%= %>表示:需要对什么进行取值 一般引用htmlWebpackPlugin里的值,比如 二、index.html中遍历: <!--遍历:得到的htmlWebpackPlugin的key是files和options,再分别对这两个key进行遍历--> <% for (var key in htmlWebpackPlugin.files){ %> <%= key %>:<%= JSON.stringify(htmlWebpackPlugin.files[key]) %> <% } %> <% for (var key in htmlWebpackPlugin.options){ %> <%= key %>:<%= JSON.stringify(htmlWebpackPlugin.options[key]) %> <% } %> 注:JSON.stringify(htmlWebpackPlugin.files[key])对这一对象的内容字符串化 三、htmlWebpackPlugin.files.chunks[’main’].entry 就可以拿到chunk main生成的文件名称。 四、https://www.npmjs.com中搜索html-webpack-plugin可以看到对插件的详细解释 五、path:输出的时候把所有文件都放到合格目录下 publicPath:占位符,需要上线,设置时,如果设置为http://cdn.com,这样js的路径就会替换为绝对地址以http://cdn.com开头的路径,这样就能满足上线需求了。 六、minify,对上线的html进行压缩 https://www.npmjs.com,输入html-webpack-plugin,然后搜索minify,找到html-minify的链接点进去,能看到minify的参数列表。 1.removeComments:true //删除注释 2. collapseWhitespace: true//删除空格
3.3 自动化生成项目中的HTML页面(下)
一、如果想用不同的模版生成不同的html文件,只用在plugins里添加各种htmlWebpackPlugin的实例就好了。 二、页面中引入inline的script github上,ampedandwired/html-webpack-plugin/examples/inline/template.jade中可以看到代码。 三、htmlWebpackPlugin.files.chunks.entry就是chunks输出的地址 四、main以inline的形式引进,a,b,c以外链的形式引进 1、index.html中 (1)在htmlWebpackPlugin的配置中有一个有一个参数chunks可以配置。 (2)head中 <script type="text/javascript"> <%=compilation.assets[htmlWebpackPlugin.files.chunks.main.entry.substr(htmlWebpackPlugin.files.publicPath.length)].source() %></script> 重点:!!!compilation.assets是webpack暴露出来可以获取文件数据的方法。通过传文件名路径进这个对象,拿到这个文件的索引,通过调用source拿到文件内容。 compilation.assets需要的是不带publicPath,htmlWebpackPlugin.files.chunks.main.entry带publicPatch,所以用substr()截取。 (3)body中<%= htmlWebpackPlugin.files.chunks[k].entry %> (4)config.js中inject为false 五、小结 1、html和动态生成的文件一一对应。 2、htmlWebpackPlugin,如何自定义html,并且通过模板,参数如何传参。 3、多页面时,如何通过htmlWebpackPlugin生成多个html 4、深入探究通过htmlWebpackPlugin,结合模板的方式把生成的js,通过inline引入到html中。
第四章 处理项目中的资源文件
4.1 什么是loader以及它的特性
一、新建一个组件(component),layer有自己的模版文件和css文件还有js文件。然后用export default导出去可以给别人调用。这都是es6的写法。 二、loader可以生成额外的文件. (外注:Webpack 本身只能处理原生的 JavaScript 模块,但是 loader 转换器可以将各种类型的资源转换成 JavaScript 模块。这样,任何资源都可以成为 Webpack 可以处理的模块。) 三、进入webpack网站的user loaders: 使用loader的三种方式 1、require的路径前面加loader! 2、直接配置配置文件 loaders test:对资源的正则匹配,如果匹配到Loader,就会对其进行处理。 3、直接使用CLI webpack --module-bind jade --module-bind 'css=style!css',指定了2个loader,先是css loader,然后是style loader
4.2 使用babel-loader转换ES6代码(上)
一、babel 1、babel是一个转换编译器,它能将ES6转换成可以在浏览器中运行的代码 2、安装babel 终端目标文件夹输入:npm install --save-dev babel-loader babel-core 3、loader:'babel-loader'可以正常运行,视频中的loader:'babel'不能正常运行。 4、babel的loader是一个非常耗时的转换。改善之前的时间是8260ms。 二、query: ['kwɪərɪ]查询 · presets:[priː'sets] 三、安装plugin的latest 终端目标文件输入:npm install --save-dev babel-preset-latest 四、改善: (1)webpack 的api的configuration loaders的参数5个:test,exclude,include,loader,loaders (2)改善方法:exclude,include参数 例如:exclude:'./node_modules/',//node_modules是已经引用过的,已经打包过的文件,其实这里对速度没有影响,这是告诉你如果是不相关的文件,可以用exclude include:'./src/', 1)会报错:-configuration.module.loaders[0].exclude: The provided value "./node_modules/" is not an absolute path! 2)报错的解决方法: exclude:__dirname+'/node_modules/',//已经引用过的,已经打包过的文件 include:__dirname+'/src/', (3)这样初步改善后时间是1210ms 五、给loader指定参数presets 1、直接Loader后跟问号 require('url-loader?mimetype=images/png!./file.png'); 2、配置文件中跟问号 3、配置文件中用query 4、项目根目录建立babelrc配置文件,配置文件中一个对象,对象中参数为presets. 5、config.js中指定babel,babel指定presets.
4.3 使用babel-loader转换ES6代码(下)
node中的对象path. var path = require(‘path’); 一、(改善)进一步加快解析速度: 1、path.resolve(__dirname,'app/src') node有个api:path,path有个方法:resolve(解析)。 __dirname:在运行环境下的变量,在当前环境的路径, 'app/src':相对路径 解析完了之后可以得到一个绝对路径 2、改善方法: (1)改善的代码:exclude:path.resolve(__dirname,'/node_modules/'), include:path.resolve(__dirname,'/src/') (2)这样进一步改善后时间是618ms (3)注意,如果是'node_modules'(视频中),而不是'/node_modules/'的话,也能运行。但是'/node_modules/'要更快,'/node_modules/')是618ms,而'node_modules'(视频中)花的时间是1254ms
4.4 处理项目中的CSS
一、安装style-loader和css-loader 终端目标文件输入:npm i style-loader css-loader --save-dev 二、webpack可以将任何资源视为一个模块。 三、这里将css引用进来, 1、app.js:用的是es6的import语法 2、webpack.config.js: module的loaders 四、postcss-loader 对css进行浏览器兼容性考虑时,可以用到这个loader 1、安装postcss-loader 终端目标文件输入:npm install postcss-loader --save-dev 2、是一个后处理器。 3、可以加浏览器的前缀 (1)安装autoprefixer 终端目标文件输入:npm install autoprefixer --save-dev 4、loader处理方式是从右到左,即从数组的最后一项往前 5、webpack.config.js中, 视频中的配置现在的postcss已经不支持了,我的配置是 { test: /\.css$/, loaders: [ "style-loader", "css-loader?importLoaders=1", //这里是为了把css里的@import先执行第一个loader { loader: "postcss-loader”, options: { plugins: (loader)=>[ require('autoprefixer')({ broswers:['last 5 versions'] }) ] }, } ], }
4.5 使用less及sass
一、less-loader 1、安装: 终端目标文件输入:npm i less-loader --save-dev 错误提示:npm WARN less-loader@4.0.3 requires a peer of less@^2.3.1 but none was installed. 说明less没有装 2、安装less 终端目标文件输入:npm i less --save-dev 二、less-loader 基本配置是 loader: ‘style-lander!css-loader!postcss-loader!less-loader’ 三、sass-loader 1、安装 终端目标文件输入:npm i sass-loader --save-dev 出现错误提示: npm WARN sass-loader@6.0.3 requires a peer of node-sass@^4.0.0 but none was installed. 说明需要安装node-sass,解决方法: 终端目标文件输入:npm i node-sass -g --save-dev
4.6 处理模板文件
一、layer.html是模板文件 1、处理模板文件的做法:(1)webpack将模板文件当做一个字符串进行处理。(2)webpack将模板文件当成已经编译好的的模板的处理函数。 对js模板语法,模板引擎,模板的作用的认识和了解再来看这章会比较容易理解。 二、要支持html文件,安装html-loader 终端目标文件输入:npm install html-loader --save-dev 三、要支持.ejs文件或者是.tpl文件,安装ejs 终端目标文件输入:npm install ejs-loader --save-dev layer.js载入ejs模板时,返回的是一个function,这时的import tpl from './layer.tpl';中的tpl代表的不再是字符串,表示的是一个已经编译过的函数 四、react——jsx vue——jsx
4.7 处理图片以及其它文件
一、添加图片 1、css中的背景图片。 (1)安装file-loader 终端目标文件输入:npm install file-loader --save-dev 2、模板文件layer.tpl直接引用图片。 (1)绝对路径:直接写绝对路径就行。 (2)相对路径: <img src="${require('../../assets/bg.jpg')}" 3、最根部的文件index.html引用图片。 (1)绝对路径:直接写绝对路径就行。 (2)相对路径:file-loader 二、图片打包后的输出地址: 1、 query:{ name:'assets/[name]-[hash:5].[ext]' } 2、安装url-loader url-loader和file-loader相似,但是url-loader可以指定limit参数。 (1)终端目标文件输入:npm install url-loader --save-dev url-loader可以处理文件或者图片,当文件/图片大小大于指定的limit,就会丢给filel-loader去处理,当小于设定的limit,就会转为base64编码,不再是一个url(不再是一个http请求),图片会被打包进html,css,js (2)两种图片引用方式:①通过http请求load进来。浏览器会有缓存,比较适用于重复性较高的图片。②打包成base64。任何地方要用时,都会有base64编码存在那里,会造成代码的冗余,增加代码的体积。 三、压缩图片 1、安装image-webpack-loader 终端目标文件输入:npm install image-webpack-loader --save-dev 2、先压缩文件再传给url-loader判断。
- 模块化管理工具兼打包工具 webpack
webpack 是一个[模块化管理工具]兼[打包工具] 是一个工具(和seajs,requirejs管理前端模块的方式是不一样) 在webpack一个文件就是一个模块! seajs,requirejs ...
- 前端模块化工具-webpack
详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不 ...
- 深入浅出的webpack构建工具---webpack基本配置(一)
深入浅出的webpack构建工具---webpack基本配置(一) 阅读目录 一:webpack入门构建: 1. 安装webpack到全局 2. 安装webpack到本项目. 3. 如何使用webpa ...
- 打包工具webpack和热加载深入学习
本次小编呢,为大家带来一篇深入了解打包工具 webpack. 我们今天使用的是 webpack3.8.1版本的,我们学习使用 3.8.1更稳定些,并学习自己如何配置文件,最新版本不需要自己配置文件,但 ...
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- 详解前端模块化工具-webpack
webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不在,这时,使日渐增多的js代码变得合 ...
- 前端构建工具 webpack
一.自我初级认知 (是什么? 能干什么,有卵用? 有选择为什么要选你?(比较优势在哪) ) 适合的才是最好的 模块打包器(module bundler) 根据项目 ...
- 【webpack学习笔记(一)】流行的前端模块化工具webpack初探
从开发文件到生产文件 有一天我突然意识到一个问题,在使用react框架搭建应用时,我使用到了sass/less,JSX模版以及ES6的语法在编辑器下进行开发,使用这些写法是可以提高开发的效率.可是 ...
- 前端模块化工具--webpack使用感受
话说前头 webpack前段时间有听说一下,现在已经到了3.x的版本,自己没去接触.因为之前使用gulp来作为自己的项目构建工具.现在感觉gulp使用的趋势在减少.现在这段时间去接触了webpack, ...
- 【webpack】流行的前端模块化工具webpack初探
从开发文件到生产文件 有一天我突然意识到一个问题,在使用react框架搭建应用时,我使用到了sass/less,JSX模版以及ES6的语法在编辑器下进行开发,使用这些写法是可以提高开发的效率.可是 ...
随机推荐
- Ubuntu 16.04安装WinRAR/7-Zip(基于CrossOver)
基于CrossOver的WinRAR/7-Zip有如下缺点: 1.不能像Windows那样右键菜单解压 可以解决的问题: 1.可以使用提供的浏览工具进行文件选择再解压,只是在操作上多一步. 2.类似百 ...
- linux network name space
linux network namespace概念类似于网络中的 VRF (virtual routing and forwarding).但是,你不知道VRF的概念也没关系,下面我们通过一个简单的介 ...
- python 时间四舍五入
假设时间格式为 YYYYMMDDhhmm , 比如201508010001 代表2015年8月1日0点01分. 现在有需求,要求一个start 和一个 end 变量的字符串 都是这种格式的时间. 需要 ...
- 作为一名CEO
你 不能怕得罪人 不能奢望完成工作的时候 有太多的愉悦感 你 必须要去做左右为难但左右亦可的 操蛋决策 你 得脸皮够厚 肚囊儿宽超 什么事情都能快速消化 哪怕 是 一坨屎 你 还得 决不放弃 永不言败 ...
- console command
routes/console.php copy一个默认的 Artisan::command('hello', function () { $this->comment('hello world' ...
- CF #367 DIV2 E
直接使用指针,交换时交换矩阵周围的指针即可. #include <iostream> #include <cstdio> #include <cstring> us ...
- seajs入门使用
使用 Sea.js 进行模块化开发还能够带来非常多优点: 模块的版本号管理. 通过别名等配置,配合构建工具,能够比較轻松地实现模块的版本号管理. 提高可维护性.模块化能够让每一个文件的职责单一,很有利 ...
- DHCP Snooping的实现
DHCP Snooping的实现 DHCP Snooping的实现 主要作用:1.防止在动态获得IP地址的网络环境中用户手动配置PC的IP地址;2.防止A用户的PC静态配置的IP地址顶掉B用户PC动态 ...
- day2-搭建hdfs分布式集群
1.搭建hdfs分布式集群 4.1 hdfs集群组成结构: 4.2 安装hdfs集群的具体步骤: 一.首先需要准备N台linux服务器 学习阶段,用虚拟机即可! 先准备4台虚拟机:1个namenode ...
- 异 形 卵 709 南阳oj
http://acm.nyist.net/JudgeOnline/problem.php? pid=709 异 形 卵 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 ...