github
- 笔者github https://github.com/sywsywsyw
- 灰哥github https://github.com/gxhpersonal
- 林哥github https://github.com/lin-sun
- 腾讯 https://github.com/Tencent
使用了新技术总会有兼容性问题,一般公司不考虑兼容性问题,但是还是出现诸如样式错乱、无法支持ie、缩放浏览器或屏幕设置比率非100%下的网页错位,作为开发者需要给出友好的提示,提高用户体验。
==兼容ie8、不支持以下版本==
==兼容ie需要再服务器环境下打开== (可以使用http-server,live-server热更新服务)
==因为缩放之后所有内容也会缩放,所以需要把样式改为图片然后同步缩放图片==
==缩放图片规则为:最初尺寸除以当前比例 例如放大0.2倍就是 477/1.02==
B站观看入口:https://www.bilibili.com/video/BV1Vk4y1R7nb?from=search&seid=16444809052248618350
掘金文档:https://juejin.im/post/5e9faa8fe51d4546fe263eda
掘金文档:https://juejin.im/post/5e9f6b3251882573a855cd52#heading-1
create-react-app
1 | npm install -g create-react-app |
https://nervjs.github.io/taro/docs/taroize.html
Taro 可以将你的原生微信小程序应用转换为 Taro 代码,进而你可以通过 taro build
的命令将 Taro 代码转换为对应平台的代码,或者对转换后的 Taro 代码用 React 的方式进行二次开发。
微信原生小程序转 Taro 的操作非常简单,首先必须安装使用 npm i -g @tarojs/cli
安装 Taro 命令行工具,其次在命令行中定位到小程序项目的根目录,根目录中运行:1
$ taro convert
即可完成转换。转换后的代码保存在根目录下的 taroConvert 文件夹下。你需要定位到 taroConvert
目录执行 npm install
命令之后就可以使用 taro build 命令编译到对应平台的代码。
预览h51
npm run dev:h5
==注意,转换完之后运行会提示.temp
文件有好多报错,不要在这个里面改错误,要去src
目录下面更改,因为.temp
是临时文件夹,因为这个问题折腾了一下午。==
1 | 1. `win+R` 进入对话框输入`cmd`进入命令行模式。 |
1 | const path = require('path'); |
1 | npm install webpack-dev-server --save-dev |
webpack.config.js中1
2
3
4
5
6
7
8
9
10
11
12moduel.exports = {
devServer:{
// 设置基本目录接口
contentBase: path_resolve(__dirname:'dist'); // 用于找到程序打包地址
// 服务 IP 地址
host: 'localhost',
// 服务是否开启压缩
compress: true,
// 配置服务端口号
port: 8888
}
}
package.json中1
2
3"script":{
"server":"webpack-dev-server"
}
loaders
sass
、less
文件转为css es6及以上
的代码转为大多浏览器兼容的js代码JSX
转为javascript代码所有的解析器都需要使用npm
安装然后在进行使用。
建立index.css
文件
引入到入口文件夹main.js
中1
import i_css from './css/index.js'
CSS和引入做好后,我们就需要使用loader来解析CSS文件了,这里我们需要两个解析用的loader,分别是style-loader和css-loader。
style-loader
用于处理css中的url()
, https://www.npmjs.com/package/style-loader1
npm install style-loader --save-dev
css-loader
用来将css插入到页面的style的标签。https://www.npmjs.com/package/css-loader1
npm install css-loader --save-dev
修改webpack.config.js中的module1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16module.exports = {
module:{
rules:[
{
test: /\.css$/,
use:['style-loader','css-loader'], // 第一种
loader:['style-loader','css-loader'], // 第二种
use:[{ // 第三种
loader: 'style-loader'
},{
loader: 'css-loader'
}]
}
]
}
}
==需要注意的压缩需要在生产环境下配置,因为开发环境为了方便调试压缩个棒棒==
uglifyjs-webpack-plugin
这个小瘪三插件默认集成进了webpack 所以不用安装了
引入
webpack.config.js引入1
2
3
4
5
6const uglify = require('uglifyjs-webpack-plugin');
moduel.exports = {
plugin:[
new uglify()
]
}
html-webpack-plugin
插件1 | const htmlPlugin = require('html-webpack-plugin'); |
引入npm 安装1
npm install html-webpack-plugin --save-dev
webpack.config.js进行配置1
2
3
4
5
6
7
8
9
10
11module.exports = {
plugin:[
new htmlPlugin({
minify:{
removeAttributeQuotes:true
},
hash:true,
template:'./src/index.html'
})
]
}
总结:
html文件的打包可以有效的区分开发目录和生产目录,在webpack的配置中也要搞清楚哪些配置用于生产环境,哪些配置用于开发环境,避免两种环境的配置冲突。
file-loader 解析背景图片的url,路径
url-loader 减少http请求,将图片转为dataUrl,但是如果图片过大,编码会消耗性能,所以有了limit参数进行配置
注意: loader使用时不需要require引用,plugins才需要使用require引入
url-loader 默认包含了 file-loader所以引入的时候只需要引入url-loader就行了
webpackconfig.js中1
2
3
4
5
6
7
8
9
10
11
12
13
14
15moduel.exports = {
module:{
rules:[
{
test:/\.(png|jpg|gif)/ ,
use: [
loader:'url-loader',
options:{
limit: 500000
}
]
}
]
}
}
1 | npm install --save-dev extract-text-webpack-plugin |
webpackconfig.js中1
2
3
4
5
6
7
8
9
10const extractCss = require('extract-text-webpack-plugin');
module.exports = {
module:{
test: /\.css$/,
use: extractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
}
}
图片路径问题
利用extract-text-webpack-plugin插件很轻松的就把CSS文件分离了出来,但是CSS路径并不正确,很多小伙伴就在这里搞个几天还是没有头绪,网上也给出了很多的解决方案,我觉的最好的解决方案是使用publicPath解决,我也一直在用。
publicPath:是在webpack.config.js文件的output选项中,主要作用就是处理静态文件路径的。
在处理前,我们在webpack.config.js 上方声明一个对象,叫website。1
2
3var website = {
publicPath: "http://192.168.1.108:8888/"
}
然后在output选项中引用这个对象的publicPath属性。1
2
3
4
5module.exports = {
output:{
publicPath: website.publicPath
}
}
配置完成后,你再使用webpack命令进行打包,你会发现原来的相对路径改为了绝对路径,这样来讲速度更快。
总结:这节课我们实现了CSS的分离,并在分离后处理了图片路径不对的问题。处理路径的方法一定要充分理解,因为这在工作中经常用到。
html-withimg-loader1
npm install html-withimg-loader --save
1 | { |
如何把图片放到指定的文件夹下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15module.exports = {
rules:[{
test: /\.(png|jpg|gif)/,
use:[{
loader:'style-loader',
option:{
limit:'url-loader',
options:{
limit:5000,
outputPath:'images/'
}
}
}]
}]
}
1 | npm install --save-dev less |
webpack.js1
2
3
4
5
6
7
8
9
10{
test: /\.less$/,
use: [{
loader: "style-loader" // creates style nodes from JS strings
}, {
loader: "css-loader" // translates CSS into CommonJS
, {
loader: "less-loader" // compiles Less to CSS
}]
}
把Lees文件分离1
2
3
4
5
6
7
8
9
10
11
12{
test: /\.less$/,
use: extractTextPlugin.extract({
use: [{
loader: "css-loader"
}, {
loader: "less-loader"
}],
// use style-loader in development
fallback: "style-loader"
})
}
1 | npm install --save-dev node-sass |
注意:在用npm安装时,这个loader很容易安装失败,最好使用cnpm来进行安装。如果你安装一直报错,最好是把node_modules文件夹删除后,再重新安装。1
2
3
4
5
6
7
8
9
10{
test: /\.scss$/,
use: [{
loader: "style-loader" // creates style nodes from JS strings
}, {
loader: "css-loader" // translates CSS into CommonJS
}, {
loader: "sass-loader" // compiles Sass to CSS
}]
}
把Lees文件分离1
2
3
4
5
6
7
8
9
10
11
12{
test: /\.scss$/,
use: extractTextPlugin.extract({
use: [{
loader: "css-loader"
}, {
loader: "sass-loader"
}],
// use style-loader in development
fallback: "style-loader"
})
}
PostCSS css处理平台
需要安装postcss-loader和autoprefixer1
npm install --save-dev postcss-loader autoprefixer
postcss.config.js
postCSS推荐在项目根目录(和webpack.config.js同级),建立一个postcss.config.js文件。1
2
3
4
5module.exports = {
plugins: [
require('autoprefixer')
]
}
编写loader
对postcss.config.js配置完成后,我们还需要编写我们的loader配置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20module.exports = {
module:{
rules:[
{
test: /\.css$/,
use: [
{
loader: "style-loader"
}, {
loader: "css-loader",
options: {
modules: true
}
}, {
loader: "postcss-loader"
}
]
}]
}
}
提取CSS
配置提取CSS的loader配置.1
2
3
4
5
6
7
8
9
10
11{
test: /\.css$/,
use: extractTextPlugin.extract({
fallback: 'style-loader',
use: [
{ loader: 'css-loader', options: { importLoaders: 1 } },
'postcss-loader'
]
})
}
总结:postcss还有很多功能,我希望小伙伴学会自学。这里给出postcss-loader的github地址:https://github.com/postcss/postcss-loader
像Bootstrap这样的框架往往会带有很多CSS。在项目中通常我们只使用它的一小部分。就算我们自己写CSS,随着项目的进展,CSS也会越来越多,有时候需求更改,带来了DOM结构的更改,这时候我们可能无暇关注CSS样式,造成很多CSS的冗余。这节课就学习用webpack消除未使用的CSS。
PurifyCSS
使用PurifyCSS可以大大减少CSS冗余,比如我们经常使用的BootStrap(140KB)就可以减少到只有35KB大小。这在实际开发当中是非常有用的。
安装PurifyCSS-webpack
从名字你就可以看出这是一个插件,而不是loader。所以这个需要安装还需要引入。 PurifyCSS-webpack要以来于purify-css这个包,所以这两个都需要安装。1
npmn i -D purifycss-webpack purify-css
这里的-D代表的是–save-dev ,只是一个简写。
引入glob
因为我们需要同步检查html模板,所以我们需要引入node的glob对象使用。在webpack.config.js文件头部引入glob。1
2const glob = require(glob);
const PurifyCSSPlugin = `require`("purifycss-webpack");
配置plugins1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17plugins:[
//new uglify()
new htmlPlugin({
minify:{
removeAttrubuteQuotes:true
},
hash:true,
template:'./src/index.html'
}),
new extractTextPlugin("css/index.css"),
new PurifyCSSPlugin({
// Give paths to parse for rules. These should be absolute!
paths: glob.sync(path.join(__dirname, 'src/*.html')),
})
]
这里配置了一个paths,主要是需找html模板,purifycss根据这个配置会遍历你的文件,查找哪些css被使用了。
注意:使用这个插件必须配合extract-text-webpack-plugin这个插件,这个插件在前边的课程已经讲解过了。如果你还不会请自学一下。
配置好上边的代码,我们可以故意在css文件里写一些用不到的属性,然后用webpack打包,你会发现没用的CSS已经自动给你删除掉了。在工作中记得一定要配置这个plugins,因为这决定你代码的质量,非常有用。
在前端开发中都开始使用ES6的语法了,虽然说webpack3增加了一些ES6的转换支持,但是实际效果不是很好,也可能是本人技术有限,没发挥出真正的功能。所以我在开发中还是喜欢添加Babel-loader的,我也查看了一些别人的webpack配置也都增加了babel-loader,所以这节课我们学习一下如何增加Babel支持。(此节文章部分内容引用了zhangwang大神的文章内容)
Babel是什么? Babel其实是一个编译JavaScript的平台,它的强大之处表现在可以通过便宜帮你达到以下目的:
使用下一代的javaScript代码(ES6,ES7….),即使这些标准目前并未被当前的浏览器完全支持。
使用基于JavaScript进行了扩展的语言,比如React的JSX。
Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,webpack可以把其不同的包整合在一起使用,对于每一个你需要的功能或拓展,你都需要安装单独的包(用得最多的是解析ES6的babel-preset-es2015包和解析JSX的babel-preset-react包)。
我们先一次性安装这些依赖包
`Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,webpack可以把其不同的包整合在一起使用,对于每一个你需要的功能或拓展,你都需要安装单独的包(用得最多的是解析ES6的babel-preset-es2015包和解析JSX的babel-preset-react包)。
我们先一次性安装这些依赖包1
cnpm c install --save-dev babel-core babel-loader babel-preset-env babel-preset-react
在webpack中配置Babel的方法如下:1
2
3
4
5
6
7
8
9
10
11
12{
test:/\.(jsx|js)$/,
use:{
loader:'babel-loader',
options:{
presets:[
"env","react"
]
}
},
exclude:/node_modules/
}
现在你已经可以用webapck转换ES6的语法兼容各个浏览器了,我们可以修改一下entry.js的代码如下:1
2
3
4
5import css from './css/index.css';
{
let jspangString = 'Hello Webpack'
document.getElementById('title').innerHTML=jspangString;
}
上面的代码使用了ES6的let声明方法。如果你不使用Babel来进行转换,你会发现打包出来的js代码没有作兼容处理,使用了Babel转换的代码是进行处理过的。
虽然Babel可以直接在webpack.config.js中进行配置,但是考虑到babel具有非常多的配置选项,如果卸载webapck.config.js中会非常的雍长不可阅读,所以我们经常把配置写在.babelrc文件里。
在项目根目录新建.babelrc文件,并把配置写到文件里。
.babelrc1
2
3{
"presets":["react","es2015"]
}
.webpack.config.js里的loader配置1
2
3
4
5
6
7{
test:/\.(jsx|js)$/,
use:{
loader:'babel-loader',
},
exclude:/node_modules/
}
作为一个程序员每天的大部分工作就是调试自己写的程序,那我们使用了webpack后,所以代码都打包到了一起,给调试带来了麻烦,但是webpack已经为我们充分考虑好了这点,它支持生产Source Maps来方便我们的调试。(敲黑板,这节可能偏理论一点。)
在使用webpack时只要通过简单的devtool配置,webapck就会自动给我们生产source maps 文件,map文件是一种对应编译文件和源文件的方法,让我们调试起来更简单。
四种选项
在配置devtool时,webpack给我们提供了四种选项。
四种打包模式,有上到下打包速度越来越快,不过同时也具有越来越多的负面作用,较快的打包速度的后果就是对执行和调试有一定的影响。
个人意见是,如果大型项目可以使用source-map,如果是中小型项目使用eval-source-map就完全可以应对,需要强调说明的是,source map只适用于开发阶段,上线前记得修改这些调试设置。
简单的配置:1
2
3
4
5
6
7
8module.exports = {
devtool: 'eval-source-map',
entry: __dirname + "/app/main.js",
output: {
path: __dirname + "/public",
filename: "bundle.js"
}
}
总结:调试在开发中也是必不可少的,但是一定要记得在上线前一定要修改webpack配置,在打出上线包。
一个项目中是有开发环境和生产环境的,这两个环境的依赖也是不同的。
one1
npm install jquery
安装完成后,你会发现在package.json中并不存在这个包的依赖。如果你项目拷贝给别人继续开发,或者别人和你git合作,再次下载项目npm install时就会缺少这个jquery包。项目就会无法正常运行,所以这也是我们最不赞成的安装方法。
two1
npm install jquery --save
安装完成后,它存在于package.json的dependencies中,也就是说它是生产环境需要依赖的包(上线时需要的依赖包)。
three1
npm install jquery --save-dev
安装完成后,它存在于package.json的devDependencies中,也就是说它是开发环境中需要的,上线并不需要这个包的依赖。
1 | npm install |
1 | npm install --production |
我们在以前的配置中设置了一个变量website,用于静态资源正确找到路径。那如果生产环境和开发环境不一样,而且我们需要来回切换,这时候我们需要更好的设置方法。1
2
3var website={
publicPath:"http://192.168.0.104:1717/"
}
修改package.json命令
其实就是添加一个dev设置,并通过环境变量来进行区分,下面是package.json里的值。1
2
3
4
5"scripts": {
"server": "webpack-dev-server --open",
"dev":"set type=dev&webapck",
"build": "set type=build&webpack"
},
修改webpack.config.js文件
可以利用node的语法来读取type的值,然后根据type的值用if–else判断。1
2
3
4
5
6
7
8
9if(process.env.type== "build"){
var website={
publicPath:"http://192.168.0.104:1717/"
}
}else{
var website={
publicPath:"http://cdn.jspang.com/"
}
}
如果你说我想看一下传过来的值到底是什么?可以用下面的输出语句。1
console.log( encodeURIComponent(process.env.type) );
为了让大家容易看懂,我把webpack.config.js中的entry入口文件进行模块化设置,单独拿出来制作成一个模块。
首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下:
entry_webpack.js1
2
3
4
5
6
7
8//声明entry变量
const entry ={};
//声明路径属性
entry.path={
entry:'./src/entry.js'
}
//进行模块化
module.exports =entry;
配置的模块化代码编写好以后,需要在webpack.config.js中引入,注意这里的引入只能使用require的方法。1
const entry = require("./webpack_config/entry_webpack.js")
webpack.config.js 入口文件中1
2
3module.exports = {
entry:entry.path
}
这时候你可以再次使用npm run dev 进行测试,你会发现模块化成功了。
总结: 模块化在实际工作中是必不可少的操作,但是现在的webpack教程还很少讲到,大家一定要重视这节,因为如果你搞不清这节的内容,可能你看别人的配置也会看不明白。记得一定要动手练习操作,否则你下面的课程也没办法学习。
笨鸟贤妃,用了两天终于搞好了jenkins+coding的vue项目自动化打包。
下载官网实在太慢了https://jenkins.io/zh/download/
通过三方链接进行下载 https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows/
https://www.jianshu.com/p/dcde5ab4cfd9
使用dos的tree命令输出文件夹树 http://www.cnblogs.com/dkplus/p/8487330.html
用dos的tree命令就可以实现文件夹树状图的输出,不过目前仅能输出为.txt文件方法如下:
开始->运行 输入cmd打开命令控制台
切换到你要显示的列表文件夹 比如 输入 d: 切换到d盘
输入 tree >c:\dirlist.txt就可以生成文件夹的树型列表
tree /f >c:\dirlist.txt 可以生成文件夹和文件的树型列表
这个时候就可以在c盘生成你要的文本了
vue中Axios的封装与API接口的管理详解 https://www.jb51.net/article/145341.htm
1 npm install axios