项目git地址

一、node知识

__dirname: 获取当前文件所在路径,等同于path.dirname(__filename)


  1. console.log(__dirname);
  2. // Prints: /Users/mjr
  3. console.log(path.dirname(__filename));
  4. // Prints: /Users/mjr

path.resolve([..paths]): 把一个路径或路径片段的序列解析为一个绝对路径

  • 给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径
  • 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上
  • 生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录
  • 长度为零的 path 片段会被忽略
  • 如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径

  1. path.resolve('/foo/bar', './baz');
  2. // 返回: '/foo/bar/baz'
  3. path.resolve('/foo/bar', '/tmp/file/');
  4. // 返回: '/tmp/file'
  5. path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
  6. // 如果当前工作目录为 /home/myself/node,
  7. // 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

二、配置最基本的webpack

项目目录生成如下文件


  1. .
  2. ├── build
  3. ├── build.js
  4. ├── index.html
  5. ├── webpack.base.conf.js
  6. ├── webpack.dev.conf.js
  7. └── webpack.prod.conf.js
  8. ├── package.json
  9. ├── package-lock.json
  10. └── src
  11. ├── App.vue
  12. ├── main.js
  13. ├── timg.gif
  14. └── timg.jfif

首先,先装下webpack依赖:


  1. npm i webpack webpack webpack-cli -D

1、webpack.base.conf.js


  1. const path = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. module.exports = {
  4. entry: {
  5. bundle: path.resolve(__dirname, '../src/main.js')
  6. },
  7. output: {
  8. path: path.resolve(__dirname, '../dist'),
  9. filename: '[name].[hash].js',
  10. publicPath: '/'
  11. },
  12. module: {
  13. rules: [
  14. ]
  15. },
  16. plugins: [
  17. <!-- 以当前目录的index.html为模板生成新的index.html,这个插件就是将新生成的文件(js,css)引入 -->
  18. new HtmlWebpackPlugin({
  19. template: path.resolve(__dirname, 'index.html')
  20. })
  21. ],
  22. resolve: {
  23. }
  24. };

上面用到了html-webpack-plugin插件,装下:


  1. npm i html-webpack-plugin -D

2、webpack.dev.conf.js


  1. const merge = require('webpack-merge');
  2. const path = require('path');
  3. const baseConfig = require('./webpack.base.conf');
  4. module.exports = merge(baseConfig, {
  5. // mode关系到代码压缩质量 https://webpack.docschina.org/guides/tree-shaking/
  6. mode: 'development',
  7. // source-map,将编译后的代码映射到原代码,便于报错后定位错误
  8. devtool: 'inline-source-map',
  9. <!-- webpack-dev-server配置项 -->
  10. devServer: {
  11. <!-- devserver启动服务的根路径 -->
  12. contentBase: path.resolve(__dirname, '../dist'),
  13. <!-- 打开浏览器 -->
  14. open: true
  15. }
  16. });

合并webpack配置的插件webpack-merge,能够启一个简易服务的webpack-dev-server,详情


  1. npm i webpack-dev-server webpack-merge -D

3、webpack.prod.conf.js


  1. const merge = require('webpack-merge');
  2. const CleanWebpackPlugin = require('clean-webpack-plugin');
  3. const path = require('path');
  4. const baseConfig = require('./webpack.base.conf');
  5. module.exports = merge(baseConfig, {
  6. mode: 'production',
  7. devtool: 'source-map',
  8. module: {
  9. rules: []
  10. },
  11. plugins: [
  12. new CleanWebpackPlugin(['dist/'], {
  13. root: path.resolve(__dirname, '../')
  14. })
  15. ]
  16. });

清除文件的插件:


  1. npm i clean-webpack-plugin -D

4、build.js


  1. const webpack = require('webpack');
  2. const config = require('./webpack.prod.conf');
  3. webpack(config, (err, stats) => {
  4. if (err || stats.hasErrors()) {
  5. // 在这里处理错误
  6. console.error(err);
  7. return;
  8. }
  9. // 处理完成
  10. console.log(stats.toString({
  11. chunks: false, // 使构建过程更静默无输出
  12. colors: true // 在控制台展示颜色
  13. }));
  14. });

5、npm scripts


  1. // package.json
  2. {
  3. +++
  4. "scripts": {
  5. "build": "node build/build.js",
  6. "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
  7. },
  8. }

以上算是一个webpack的基本结构,如果入口文件(main.js)里引入的是正经js,npm dev和npm build是可以的打包编译的,但是我们是要写vue,那就要加些loader和plugins了

三、引入一些基本的loader

1、babel-loader

依赖安装要求:webpack 4.x | babel-loader 7.x | babel 6.x,注意babel-loader和babel的版本,不然会报错


  1. npm install -D babel-loader@7 babel-core babel-preset-env webpack

然后再配置中加入


  1. // base.conf.js
  2. module.exports = {
  3. +++
  4. module: {
  5. rules: [
  6. {
  7. test: /\.js$/,
  8. exclude: /node_modules/,
  9. use: {
  10. loader: 'babel-loader',
  11. }
  12. },
  13. +++
  14. ]
  15. }
  16. }

我们还需要添加一个配置文件(.babelrc)在根目录下:


  1. /// .babelrc
  2. {
  3. "presets": [
  4. ["env", {
  5. "targets": {
  6. "browsers": [">0.25%", "last 2 versions", "not ie 11", "not op_mini all"]
  7. }
  8. }]
  9. ]
  10. }

这就是 babel-preset-env 的作用,帮助我们配置 babel。我们只需要告诉它我们要兼容的情况(目标运行环境),它就会自动把代码转换为兼容对应环境的代码。
以上代码表示我们要求代码兼容最新两个版本的浏览器,不用兼容 11(及以下)和Opera Mini,另外市场份额超过 0.25% 的浏览器也必须支持。
只需要告诉 babel-preset-env 你想要兼容的环境,它就会自动转换

2、url-loader、file-loader

如果我们希望在页面引入图片(包括img的src和background的url)。当我们基于webpack进行开发时,引入图片会遇到一些问题

其中一个就是引用路径的问题。拿background样式用url引入背景图来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件

另外,如果图片较多,会发很多http请求,会降低页面性能。这个问题可以通过url-loader解决。url-loader会将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURl,大于limit的还会使用file-loader进行copy。

url-loader和file-loader是什么关系呢?简答地说,url-loader封装了file-loader。url-loader赖于file-loader,即使用url-loader时,也要安装file-loader


  1. npm i url-loader file-loader -D

  1. /// base.conf.js
  2. module.exports = {
  3. +++
  4. module: {
  5. rules: [
  6. +++
  7. {
  8. test: /\.(png|jpg|jfif|jpeg|gif)$/,
  9. use: [
  10. {
  11. loader: 'url-loader',
  12. options: {
  13. // 低于这个limit就直接转成base64插入到style里,不然以name的方式命名存放
  14. // 这里的单位时bit
  15. limit: 8192,
  16. name: 'static/images/[hash:8].[name].[ext]'
  17. }
  18. }
  19. ]
  20. },
  21. // 字体图标啥的,跟图片分处理方式一样
  22. {
  23. test: /\.(woff|woff2|eot|ttf|otf)$/,
  24. use: [
  25. {
  26. loader: 'url-loader',
  27. name: 'static/font/[hash:8].[name].[ext]'
  28. }
  29. ]
  30. },
  31. ]
  32. },
  33. }

3、vue-loader

作用自己去看


  1. npm i vue-loader -D

  1. // base.conf.js
  2. module.exports = {
  3. +++
  4. module: {
  5. rules: [
  6. +++
  7. {
  8. test: /\.vue$/,
  9. loader: 'vue-loader'
  10. }
  11. ]
  12. }
  13. }

在这里还要一个插件,这个插件是必须的!


  1. // base.conf.js
  2. const VueLoaderPlugin = require('vue-loader/lib/plugin')
  3. module.exports = {
  4. +++
  5. plugins: [
  6. // 它的职责是将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块。
  7. // 例如,如果你有一条匹配 /\.js$/ 的规则,那么它会应用到 .vue 文件里的 <script> 块
  8. new VueLoaderPlugin(),
  9. +++
  10. ]
  11. }

4、处理样式

  • less-loader: 将less转css
  • css-loader: 将css转为CommonJS规范的js字符串
  • style-loader: 将js字符串转为style node插入到html中
  • postcss-loader: PostCSS 是一个允许使用 JS 插件转换样式的工具,我们用postcss的插件就要配置它,autoprefixer就是postcss项目里的一个插件
  • autoprefixer: 添加了 vendor 浏览器前缀,它使用 Can I Use 上面的数据。

  1. npm i less-loader css-loader style-loader less autoprefixer postcss-loader -D

  1. const StyleLintPlugin = require('stylelint-webpack-plugin');
  2. // base.conf.js
  3. module.exports = {
  4. +++
  5. module: {
  6. rules: [
  7. {
  8. // less css
  9. test: /\.l?css$/,
  10. // use里的loader执行顺序为从下到上,loader的顺序要注意
  11. // 这里检测到less/css文件后需要将后续处理loader都写在此use里,如果less和css过分开检测处理,不能说先用less-loader转成css,然后让它走/\.css/里的use
  12. use: [
  13. {loader: 'style-loader'},
  14. {loader: 'css-loader'},
  15. {loader: 'postcss-loader'},
  16. {loader: 'less-loader'},
  17. ]
  18. },
  19. +++
  20. ]
  21. }
  22. }
  • 配置postcss

在根目录新建个postcss.config.js文件来配置autoprefixer,通过Browerslist来帮助你配置,浏览器市场份额,了解下browserl.ist


  1. module.exports = {
  2. plugins: [
  3. require('autoprefixer')({
  4. "browsers": [
  5. "defaults",
  6. "not ie < 9",
  7. "last 2 versions",
  8. "> 1%",
  9. "iOS 7",
  10. "last 3 iOS versions"
  11. ]
  12. })
  13. ]
  14. }
  • mini-css-extract-plugin提取css

这里打包cssless 为例,r如果要用mini-css-extract-plugin插件提取css,将上面改为如下:


  1. npm install mini-css-extract-plugin -D

  1. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  2. +++
  3. module.exports = {
  4. +++
  5. // 模块,loader
  6. module: {
  7. rules: [
  8. +++
  9. {
  10. test: /\.l?(c|e)ss$/,
  11. use: [
  12. MiniCssExtractPlugin.loader,
  13. {loader: 'css-loader'},
  14. {loader: 'postcss-loader'},
  15. {loader: 'less-loader'},
  16. ]
  17. },
  18. +++
  19. ]
  20. },
  21. // 插件
  22. plugins: [
  23. +++
  24. new MiniCssExtractPlugin({
  25. filename: 'static/css/[name].[hash].css',
  26. chunkFilename: 'static/css/[name].[hash].css'
  27. })
  28. ]
  29. }

5、然后配置下别名resolve.extensions


  1. // base.conf.js
  2. module.exports = {
  3. +++
  4. resolve: {
  5. alias: {
  6. // 配置别名'vue$',不然import 'vue'时,webpack找不到
  7. 'vue$': 'vue/dist/vue.esm.js',
  8. // 这个为src配置别名,非必需,为方便而已
  9. '@': path.resolve(__dirname, '../src')
  10. },
  11. // 在import这些拓展名的文件时,可以省略拓展名
  12. extensions: ['*', '.js', '.json', '.vue'],
  13. }
  14. }

现在我们来测试以下,安装一个vue


  1. npm i vue

在mian.js里面


  1. import Vue from 'vue'
  2. import App from './App'
  3. new Vue({
  4. el: '#app',
  5. components: {App},
  6. template: '<App/>'
  7. })

在App.vue里写入


  1. <template>
  2. <div>
  3. <h3 class="title">{{title}}</h3>
  4. <p class="content">{{content}}</p>
  5. <div class="goddess">
  6. <div class="right">
  7. <h4 class="right__h4">background引入图片</h4>
  8. <div class="right__img"></div>
  9. </div>
  10. <div class="left">
  11. <h4 class="left__h4">img标签直接引入图片</h4>
  12. <img class="left__img" src="./timg.jfif" />
  13. </div>
  14. </div>
  15. </div>
  16. </template>
  17. <script>
  18. export default {
  19. components: {
  20. Foot: Footer
  21. },
  22. data () {
  23. return {
  24. title: 'hello word',
  25. content: 'webpack4 搭建vue环境',
  26. }
  27. },
  28. }
  29. </script>
  30. <style lang="less" scoped>
  31. .title {
  32. font-size: 20px;
  33. text-align: center;
  34. color: red;
  35. }
  36. .content {
  37. font-size: 14px;
  38. color: #333333;
  39. }
  40. .goddess {
  41. .left {
  42. margin-left: 50%;
  43. &__h4 {
  44. font-size: 14px;
  45. }
  46. &__img {
  47. width: 308px;
  48. height: 433px;
  49. }
  50. }
  51. .right {
  52. float: left;
  53. &__h4 {
  54. font-size: 14px;
  55. }
  56. &__img {
  57. width: 300px;
  58. height: 150px;
  59. background: url('./timg.gif') no-repeat;
  60. }
  61. }
  62. }
  63. </style>

好了,npm dev 先看一下女神,放松一下:

四、做一些优化

1、提取公共代码

使用 splitChucksPlugin 插件,这是 Webpack 自带的,不用安装第三方依赖,默认配置即可


  1. <!-- base.conf.js -->
  2. module.exports = {
  3. +++
  4. plugins: [
  5. +++
  6. new webpack.optimize.SplitChunksPlugin()
  7. ]
  8. }

想了解这个插件的默认配置及如何配置,英文中文

2、将第三方库单独打包

每次我们对项目进行打包时,我们都会把引用的第三方依赖给打包一遍,比如 Vue、Vue-Router、React 等等。但是这些库的代码基本都是不会变动的,我们没必要每次打包都构建一次,所以我们最好将这些第三方库提取出来单独打包,这样有利于减少打包时间。
官方插件是 DllPlugin。推荐一个比较好用的插件 —— autodll-webpack-plugin


  1. npm i autodll-webpack-plugin -D

  1. // base.conf.js
  2. module.exports = {
  3. +++
  4. plugins: [
  5. // 将一些不太可能改动的第三方库单独打包,会通过缓存极大提升打包速度
  6. new AutoDllPlugin({
  7. // will inject the DLL bundle to index.html
  8. // default false
  9. inject: true,
  10. debug: false,
  11. filename: '[name]_[hash].js',
  12. path: 'static',
  13. entry: {
  14. // [name] = vue, 在这里会将entry里的每个item(vue,jquery)都打包成一个js
  15. vue: [
  16. 'vue',
  17. 'vue-router'
  18. ],
  19. // [name] = jquery
  20. // jquery: [
  21. // 'jquery',
  22. // 'jquery-from'
  23. // ]
  24. }
  25. }),
  26. +++
  27. ]
  28. }

inject 为 true,插件会自动把打包出来的第三方库文件插入到 HTML。filename 是打包后文件的名称。path 是打包后的路径。entry 是入口,vendor 是你指定的名称,数组内容就是要打包的第三方库的名称,不要写全路径,Webpack 会自动去 node_modules 中找到的。
每次打包,这个插件都会检查注册在 entry 中的第三方库是否发生了变化,如果没有变化,插件就会使用缓存中的打包文件,减少了打包的时间,这时 Hash 也不会变化。

3、热重载

“热重载”不只是当你修改文件的时候简单重新加载页面。启用热重载后,当你修改 .vue 文件时,该组件的所有实例将在不刷新页面的情况下被替换。它甚至保持了应用程序和被替换组件的当前状态!当你调整模版或者修改样式时,这极大地提高了开发体验,以下两种方式择一即可


  1. "scripts": {
  2. +++
  3. "dev": "webpack-dev-server --hot --inline --progress --config build/webpack.dev.conf.js"
  4. },
  • 方式2:或者通过配置webpack.dev.config.js,相比第一种,就会麻烦一点

  1. const webpack = require('webpack')
  2. module.exports = {
  3. +++
  4. module: {
  5. devServer: {
  6. +++
  7. // 开启热重载
  8. hot: true
  9. },
  10. plugins: [
  11. // 启用模块热替换(HMR)
  12. new webpack.HotModuleReplacementPlugin(),
  13. // 当开启 HMR 的时候使用该插件会显示模块的相对路径,建议用于开发环境。
  14. new webpack.NamedModulesPlugin(),
  15. +++
  16. ]
  17. }
  18. }

4、eslint

确保 VS Code 安装了 Vetur(设置编辑器支持vue文件,如果写过vue忽略)Eslint 插件


  1. npm i -g eslint@latest
  2. eslint --init

然后选个最流行的就行了

会帮你新建一个.eslintrc.js 的配置文件以及装一些 eslint 的依赖

在 package.json 里加上:


  1. {
  2. +++
  3. "scripts": {
  4. +++
  5. "lint": "eslint --ext .js,.vue src"
  6. },
  7. }

你可以尝试的npm run lint,你会发现spacing 系列no-new.vue语法不支持等问题
当然,你可以通过改写 lint 命令(加个--fix)来解决部分语法报错


  1. {
  2. +++
  3. "scripts": {
  4. +++
  5. "lint": "eslint --fix --ext .js,.vue src"
  6. },
  7. }

或者保存的时候让 eslint 插件自动修复。 更改 VS Code 中的 eslint.autoFixOnSave 设置,勾选文本编辑->Format On Save
当然这玩法不是我们这里的重点,安装 eslint-plugin-html 来解决vue语法eslint报错问题


  1. npm install -D eslint-plugin-html

在.eslintrc.js 中配置 eslint-plugin-html


  1. module.exports = {
  2. +++
  3. "plugins": [
  4. // 使用eslint-plugin-html
  5. "html"
  6. ]
  7. };

至于 main.js 里的 new 指定给变量错误 disable 掉


  1. +++
  2. /* eslint-disable no-new */
  3. new Vue({
  4. el: '#app',
  5. components: {
  6. App
  7. },
  8. template: '<App/>'
  9. })
  • 代码如果eslint有报错,就让编译不通过

  1. npm i eslint-loader babel-eslint -D

  1. <!-- .eslintrc.js -->
  2. {
  3. +++
  4. "parser": "babel-eslint"
  5. }

  1. <!-- base.config.js -->
  2. module.exports = {
  3. module: {
  4. rules: [
  5. {
  6. test: /\.(vue|js)$/,
  7. loader: 'eslint-loader',
  8. exclude: /node_modules/,
  9. // 预处理
  10. enforce: 'pre',
  11. include: [path.join(__dirname, '..', 'src')]
  12. }
  13. ]
  14. }
  15. }
  • 代码提交之前对代码进行检查

  1. npm i husky -D

  1. <!-- package.json -->
  2. {
  3. +++
  4. "script": {
  5. +++
  6. "precommit": "eslint --fix --ext .js --ext .vue src/"
  7. }
  8. }

该工具可以在我们提交代码时,调用"precommit"钩子,执行预处理操作,eslint不通过,无法提交

在提交时仅对git add的 js,vue 文件进行检测lint-staged 和 husky 在 pre-commit 阶段做代码检查


  1. npm i lint-staged -D

  1. <!-- package.json -->
  2. {
  3. +++
  4. "script": {
  5. +++
  6. "precommit": "lint-staged"
  7. },
  8. "lint-staged": {
  9. "src/**/*.{js,vue}": [
  10. "eslint --fix",
  11. "git add"
  12. ]
  13. },
  14. }

5、引入jquery shimming


  1. npm i juery -D

  1. <!-- base.config.js -->
  2. module.exports = {
  3. +++
  4. plugins: [
  5. +++
  6. new webpack.ProvidePlugin({
  7. $: 'jquery'
  8. })
  9. ]
  10. };

这样就可以将$当全局变量使用了,当然eslint要配置个global,这里不介绍了

对你有帮助的话点个刷波6,点个赞吧

原文地址:https://segmentfault.com/a/1190000016972438

webpack4搭建Vue开发环境笔记~~持续更新的更多相关文章

  1. 初探webpack之从零搭建Vue开发环境

    初探webpack之搭建Vue开发环境 平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码, ...

  2. 【原创】windows下搭建vue开发环境+IIS部署

    [原创]win10下搭建vue开发环境  如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图:     详细的安 ...

  3. windows下搭建vue开发环境+IIS部署

    原创]win10下搭建vue开发环境  https://www.cnblogs.com/ixxonline/p/6007885.html 特别说明:下面任何命令都是在windows的命令行工具下进行输 ...

  4. 十分钟上手-搭建vue开发环境(新手教程)

    想写一些关于vue的文章已经很久了,因为这个框架已经火了很久,在公司里用的框架都比较老旧,但怎么也得跟上前端发展变化的潮流,这不,开始使用vue开发项目了,一遍开发一边踩坑中,今天要记录的是五分钟搭建 ...

  5. 1.WIN10下搭建vue开发环境

    WIN10下搭建vue开发环境 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后,会自动安装好node以及包管理工具npm,我们后续的安装将依赖npm工具. ...

  6. 搭建vue开发环境的步骤,六步完成

    搭建vue开发环境的步骤,其实也挺简单的,之前这环境的配置也困扰着我一:在搭建vue的开发环境之前,一定一定要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,下载地址:h ...

  7. 基于 Webpack 4 搭建 Vue 开发环境

    自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...

  8. 搭建Vue开发环境

    1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...

  9. 搭建vue开发环境的步骤

    相信很多人在刚开始学习vue这个框架的时候,在最开始搭建开发环境的时候,都会遇到一些大大小小的坑,我之前在学习angular的时候搭建过一次,过了一个月后在搭建第二次的时候,竟然有一些混乱,所以今天想 ...

随机推荐

  1. AtCoder Regular Contest 082 ABCD

    A #include<bits/stdc++.h> using namespace std; ]; int n,m; int main(){ cin>>n>>m; ...

  2. 得到web.xml中servletContext的context-param

    import org.springframework.web.context.ContextLoader; // web.xml文件中已经启用数据权限 String enableDataSecurit ...

  3. Net Core IIS Express In

    IIS Express In Asp.Net Core   IIS Express是一个Mini版的IIS,能够支持所有的Web开发任务,但是这种设计有一些缺陷,例如只能通过localhost:< ...

  4. nginx超时问题

    一. 戏说不管你是做运维还是做开发,哪怕你是游客,时不时会遇到502 Bad Gateway或504 Gateway Time-out.出现这页面,把服务重启下,再实在不行重启下服务器,问题就解决了, ...

  5. AJPFX关于JAVA StringBuffer的用法总结

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  6. vue2.0:(八)、外卖App弹窗部分知识点总结

    本篇文章是对外卖App弹窗部分知识点的总结. 知识点一:如何从接口取出不同的图片. 答: 1.header.vue: 代码: <ul v-if="seller.supports&quo ...

  7. css hack 浏览器携带自身特有的属性 (二)

    css hack 浏览器携带自身特有的属性,才是我们真正要解决的css 兼容问题. 这里只是分享思路. 举例子: 1 outline,尤其是一些 自带继承特性的属性.这里指的是 隐性的inherite ...

  8. 登录控制 BaseController

    执行方法前 判断 sessin 登录信息 是否为空 ,空的话 返回 登录界面 并且给 LoginUser 赋值 public abstract class BaseController : Contr ...

  9. Memcache笔记02-telnet操作memcached

    telnet操作Memcached 登录到telnet连接到memcached服务: telnet 127.0.0.1 11211 memcached的基本命令: //当telnet登录成功可以看到一 ...

  10. redis 知识归档

    中文版redis命令 http://www.redis.net.cn/order/    redis例子 https://github.com/ServiceStack/ServiceStack.Ex ...