基于 vue3 + webpack 5 + sass+ vw 适配方案+axios 封装,从0构建手机端模板脚手架

Webpack5正式发布也有很长长长一段时间了,上手了一段时候后发现真香。webpack5的新特性使得我们在配置上比以往版本更加方便了,构建速度也有了质的飞跃。本文着重为大家讲解从 0 到 1 搭建 vue3 + webpack 5开发环境的过程中遇到的疑问。

项目地址: webpack5-vue3

demo地址: https://zhouyupeng.github.io/webpack5-vue3/#/

先看一下配置好的项目目录结构

├─build
│  ├─webpack.base.conf.js 
│  ├─webpack.dev.conf.js   
│  ├─webpack.prod.conf.js 
│  ├─webpack.rules.conf.js 
├─node_modules
├─public
|  |-index.html
└─src
|  ├─api
|  ├─assets
|  ├─components
|  ├─filters
|  ├─plugins
|  ├─router
|  ├─store
|  ├─style
|  ├─utils
|  ├─views
|  |-App.vue
|  |-main.ts
|-.env.dev
|-.env.test
|-.env.prod
|-.gitigore
|-babel.config.js
|-package.json
|-postcss.config.js

接下来,我们使用 Webpack5 从0搭建一个完整的 Vue3 的开发环境!

环境(environment)

webpack 5 运行于 Node.js v10.13.0+ 的版本。

本文涉及到依赖的版本号

├── webpack           5.43
├── webpack-cli       4.7.2
├── node              14.17.0

初始化目录

第一步: 创建目录并且初始化 package.json

mkdir webpack5-vue3 && cd webpack5-vue3
yarn init -y

第二步: 安装webpack三件套

yarn add webpack webpack-cli webpack-dev-server -D

注意:

  1. -D 等价于 --save-dev; 开发环境时所需依赖
  2. -S 等价于 --save; 生产环境时所需依赖

第三步:初始化目录和文件

  • 创建./build/webpack.config.js文件和./src/main.js文件并且写上webpack打包配置代码
// webpack.config.js
const path = require('path');
module.exports = {
    entry: path.resolve(__dirname, '../src/main.js'), // 入口
    output: {
        path: path.resolve(__dirname, '../dist'),
        filename: './js/[name].[chunkhash].js',
        publicPath: './',
    },
}
  • 在package.json的scripts里写上打包命令
"build": "webpack --config ./build/webpack.config.js --mode production --progress --color -w"

参数详解

  • –config或-c: 提供 webpack 配置文件的路径,例如 ./webpack.config.js
  • –mode:配置环境也可写在配置文件里 不配置mode 默认production模式打包
  • –progress: 启用在构建过程中打印编译进度
  • –color: 启用控制台颜色
  • –watch或-w: 监听文件变化

运行打包脚本yarn build看到webpack运行并且打包成功了。

配置开发服务器

webpack5 + webpack-cli4 启动开发服务器命令与之前有所变化,从 webpack-dev-server 转变为 webpack serve,

"build": "webpack serve --config ./build/webpack.config.js --mode development --progress --color",

运行起来后出现了另外的问题。改了代码控制台重新编译,但是热更新无效。

看一下无效的启动和有效启动之后的 network 截图对比:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOTs8jF9-1627564441599)(https://card.h5551.com/gPONlR.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQQTHdw2-1627564441603)(https://card.h5551.com/gPxobq.png)]

网上找了一圈,说删除 package.json 里的 browserslist可以热更,截止我写这篇文章安装的依赖版本时不行,
最后在issues看到解决办法,按照官方给出的解释好像只会在[email protected]中修复这个问题,这里安装beta最新版本yarn add webpack-dev-server@lastest -D,运行代码发现热更新成功。
安装webpack-dev-server 4.X版本后配置发生了很多改变,废弃了很多以前的配置
4.x配置点我点我或者看这里

分环境打包

在我们平时项目开发中,一般都会有:开发环境、测试环境、预发布环境和生产环境。现在来对 webpack 的配置文件进行环境拆分。

拆分文件
├─build
│  ├─webpack.base.conf.js   //公共配置
│  ├─webpack.dev.conf.js    //mode为development配置
│  ├─webpack.prod.conf.js   //mode为production配置
│  ├─webpack.rules.conf.js  //loader配置
配置环境变量

使用dotenv来按需加载不同的环境变量,VUE CLI3的环境变量也是使用的这个插件

  • 安装dotenv插件
yarn add dotenv -D
  • 修改webpack.base.conf.js
//...
const envMode = process.env.envMode
require('dotenv').config({ path: `.env.${envMode}` })
// 正则匹配以 VUE_APP_ 开头的 变量
const prefixRE = /^VUE_APP_/
let env = {}
// 只有 NODE_ENV,BASE_URL 和以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中
for (const key in process.env) {
    if (key == 'NODE_ENV' || key == 'BASE_URL' || prefixRE.test(key)) {
        env[key] = JSON.stringify(process.env[key])
    }
}

plugins: [
    //...
    new webpack.DefinePlugin({ // 定义环境变量
        'process.env': {
            ...env
        }
    })
]

  • 修改package.json
"scripts": {
"dev": "cross-env envMode=dev webpack serve --config ./build/webpack.dev.conf.js  --color",
"build": "cross-env envMode=prod webpack --config build/webpack.prod.conf.js  --color",
"build:test": "cross-env envMode=test webpack --config build/webpack.prod.conf.js  --color"
},
  • 配置变量文件
.env.dev
.env.test
.env.prod

配置完成后可以像VUE CLI3一样使用环境变量了点我点我

配置核心功能

将 ES6+ 转 ES5

由于有些浏览器无法解析 ES6+ 等高级语法,故需要将其转化为浏览器能够解析的低版本语法

yarn add @babel/core @babel/preset-env babel-loader -D
yarn add core-js -S

loader配置

// webpack.rules.conf.js
rules: [
    {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
            loader: 'babel-loader',
        }
    }, 
]

Babel 配置文件
Babel的配置文件是Babel执行时默认会在当前目录寻找的文件,主要有.babelrc,.babelrc.js,babel.config.js和package.json。它们的配置项都是相同,作用也是一样的,只需要选择其中一种。
推荐使用后缀名是js配置文件,因为可以使用js做一些逻辑处理,适用性更强。

// babel.config.js
const presets = [
    ["@babel/preset-env", {
        "useBuiltIns": 'usage', // 这里配置usage 会自动根据你使用的方法以及你配置的浏览器支持版本引入对于的方法。
        "corejs": "3.11.0" // 指定 corejs 版本 
    }]
]
const plugins = [
]
module.exports = {
    plugins,
    presets

}
产出HTML

安装 html-webpack-plugin 插件处理 index.html 文件,此插件的功能是根据提供的模板文件,自动生成正确的项目入口文件,并把 webpack 打包的 js 文件自动插入其中

yarn add html-webpack-plugin -D

plugins配置

webpack.base.conf.js
new HtmlWebpackPlugin({
    template: path.resolve(__dirname, '../public/index.html'),
    filename: 'index.html',
    title: 'webpack5+vue3',
    minify: {
        html5: true, // 根据HTML5规范解析输入
        collapseWhitespace: true, // 折叠空白区域
        preserveLineBreaks: false,
        minifyCSS: true, // 压缩文内css
        minifyJS: true, // 压缩文内js
        removeComments: false // 移除注释
    },
    files: prodMode ? cdn.prod : cdn.dev //CDN引入文件配置
}),

这里的index.html源文件放在../public/文件夹里。
注意: 配置动态网页标题时,需将模板中的 </code> 标签里的内容改成 <code><%= htmlWebpackPlugin.options.title %></code><br> <strong>CDN引入js</strong></p> <pre><code><% for (var i in htmlWebpackPlugin.options.files&&htmlWebpackPlugin.options.files.js) { %> <script src="<%= htmlWebpackPlugin.options.files.js[i] %>"></script> <% } %> </code></pre> <h5>添加 css 和 sass 支持</h5> <pre><code>yarn add style-loader css-loader -D yarn add node-sass sass-loader -D yarn add autoprefixer postcss-loader -D  </code></pre> <p><strong>loader配置</strong></p> <pre><code>//webpack.rules.conf.js {     test: /\.(css|scss|sass)$/,     use: [         'style-loader',         'css-loader',         'postcss-loader',         'sass-loader'     ] } </code></pre> <p>loader 从右到左(或从下到上)地取值(evaluate)/执行(execute)。在上面的示例中,从 sass-loader 开始执行,最后以 style-loader 为结束。</p> <h5>配置 alias 别名</h5> <p>创建 import 或 require 的别名,来确保模块引入变得更简单</p> <pre><code>// webpack.base.conf.js resolve: {     alias: {         "@": path.resolve(__dirname, "../src"),         assets: path.resolve(__dirname, '../src/assets/'),         img: path.resolve(__dirname, '../src/assets/img'),         utils: path.resolve(__dirname, '../src/utils'),         api: path.resolve(__dirname, '../src/api'),     }, }, </code></pre> <h5>处理图片等静态资源</h5> <p>Webpack5 之前我们处理静态资源比如PNG 图片、SVG 图标等等,需要用到url-loader,file-loader,raw-loader。Webpack5 提供了内置的静态资源构建能力,我们不需要安装额外的 loader,仅需要简单的配置就能实现静态资源的打包和分目录存放。这三个loader在github上也停止了更新。</p> <p>webpack5使用四种新增的资源模块(Asset Modules)替代了这些loader的功能。</p> <p>asset/resource 将资源分割为单独的文件,并导出url,就是之前的 file-loader的功能.<br> asset/inline 将资源导出为dataURL(url(data:))的形式,之前的 url-loader的功能.<br> asset/source 将资源导出为源码(source code). 之前的 raw-loader 功能.<br> asset 自动选择导出为单独文件或者 dataURL形式(默认为8KB). 之前有url-loader设置asset size limit 限制实现。</p> <pre><code>//webpack.rules.conf.js {     test: /\.(png|jpg|svg|gif)$/,     type: 'asset/resource',     generator: {         // [ext]前面自带"."         filename: 'assets/[hash:8].[name][ext]',     }, } </code></pre> <p><strong>更多配置点我点我</strong></p> <h5>打包时清除上次构建dist目录</h5> <p>webpack5.20以下版本清除dist文件内容一般使用插件 clean-webpack-plugin, 5.20版本以后output新增特性clean,用于清除dist文件</p> <pre><code>//webpack.prod.conf.js module.exports = {   //...   output: {     clean: true, // Clean the output directory before emit.   }, }; </code></pre> <p>更多配置点我点我</p> <h5>静态资源输出到根目录</h5> <pre><code>yarn add copy-webpack-plugin -D </code></pre> <p>当某些文件不需要经过webpack打包处理而直接使用,这里我们可以使用 <code>copy-webpack-plugin</code> 这个插件,在构建的时候,将 public/ 的静态资源直接复制到 dist根目录下</p> <pre><code>//webpack.prod.conf.js new copyWebpackPlugin({     patterns: [{         from: path.resolve(__dirname, "../public"),         to: './',         globOptions: {             dot: true,             gitignore: true,             ignore: ["**/index.html*"],         }     }] }), </code></pre> <h5>提取样式文件</h5> <p>本插件会将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。</p> <pre><code>yarn add mini-css-extract-plugin -D </code></pre> <pre><code>//webpack.prod.conf.js plugins: [ //...     new miniCssExtractPlugin({         filename: './css/[name].[contenthash].css',         chunkFilename: './css/[id].[contenthash].css',     }) ], </code></pre> <p>修改<code>webpack.rules.conf.js</code></p> <pre><code>{     test: /\.(css|scss|sass)$/,     use: [         !prodMode ? 'style-loader'             : {                 loader: MiniCssExtractPlugin.loader,                 options: {                     publicPath: '../',                 },             },         'css-loader',         'postcss-loader',         'sass-loader',     ], }, </code></pre> <h4>识别 .vue文件</h4> <pre><code>yarn add vue-loader@next @vue/compiler-sfc -D yarn add vue@next -S </code></pre> <p><strong>注意:</strong></p> <ul> <li>vue-loader:它是基于 webpack 的一个的 loader 插件,解析和转换 .vue  文件,提取出其中的逻辑代码 script、样式代码 style、以及 HTML 模版 template,vue 3.x需要安装vue-loader@next。</li> <li>@vue/compiler-sfc: Vue 2.x 时代,需要 vue-template-compiler 插件处理 .vue 内容为 ast , Vue 3.x 则变成 @vue/compiler-sfc 。<br>   <br> <strong>修改webpack配置</strong></li> </ul> <pre><code>// webpack.rules.conf.js rules: [     {         test: /\.vue$/,         use: [             'vue-loader'         ]     } ] //webpack.base.conf.js const { VueLoaderPlugin } = require('vue-loader/dist/index'); plugins: [     new VueLoaderPlugin() ] </code></pre> <p><strong>添加App.vue</strong></p> <pre><code><template>     <div>         <p class="title">{{title}}</p>     </div> </template> <script> import { defineComponent, ref } from 'vue'; export default defineComponent({     setup() {         const title = ref('渐进式JavaScript 框架');         return {             title         }     } }) </script> <style scoped> .title{     color: #000; } </style> </code></pre> <p><strong>修改main.js</strong></p> <pre><code class="prism language-js"><span class="token keyword">import</span> <span class="token punctuation">{</span> createApp <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span> <span class="token comment">// Vue 3.x 引入 vue 的形式</span> <span class="token keyword">import</span> App <span class="token keyword">from</span> <span class="token string">'./App.vue'</span> <span class="token comment">// 引入 APP 页面组建</span> <span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">createApp</span><span class="token punctuation">(</span>App<span class="token punctuation">)</span> <span class="token comment">// 通过 createApp 初始化 app</span> app<span class="token punctuation">.</span><span class="token function">mount</span><span class="token punctuation">(</span><span class="token string">'#root'</span><span class="token punctuation">)</span> <span class="token comment">// 将页面挂载到 root 节点</span> </code></pre> <p>跑一遍代码,运行成功。<br> ####安装Vue全家桶</p> <pre><code> yarn add vue-router@4 vuex@next axios -S </code></pre> <h4>vw适配</h4> <pre><code>yarn add postcss-loader postcss-px-to-viewport -D </code></pre> <p>新建postcss.config.js文件</p> <pre><code>'postcss-px-to-viewport': {     unitToConvert: 'px', // 需要转换的单位,默认为"px"     viewportWidth: 750, //  设计稿的视口宽度     unitPrecision: 5, // 单位转换后保留的精度     propList: ['*'], // 能转化为vw的属性列表     viewportUnit: 'vw', //  希望使用的视口单位     fontViewportUnit: 'vw', // 字体使用的视口单位     selectorBlackList: ['.ignore', '.hairlines', '.ig-'], // 需要忽略的CSS选择器     minPixelValue: 1, // 最小的转换数值,如果为1的话,只有大于1的值会被转换     mediaQuery: false, // 媒体查询里的单位是否需要转换单位     replace: true, // 是否直接更换属性值,而不添加备用属性     include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换,例如只转换 'src/mobile' 下的文件 (include: /\/src\/mobile\//)     landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)     landscapeUnit: 'vw', // 横屏时使用的单位     landscapeWidth: 568 // 横屏时使用的视口宽度 } </code></pre> <h4>去掉生产环境console.log</h4> <p>使用TerserWebpackPlugin来进行去除<code>console.log</code>,压缩JS,webpack5之后自带最新的<code>terser-webpack-plugin</code>,无需再重新安装原文点我点我</p> <pre><code>//webpack.prod.conf.js minimizer: [     new TerserPlugin({         // 多进程         parallel: true,         //删除注释         extractComments: false,         terserOptions: {             compress: { // 生产环境去除console                 drop_console: true,                 drop_debugger: true,             },         },     }) ], </code></pre> <h4>编译缓存</h4> <p>Webpack5 内置 <code>FileSystem Cache</code> 能力加速二次构建,可以通过以下配置来实现</p> <pre><code>cache: {     type: 'filesystem',     // 可选配置     buildDependencies: {         config: [__filename],  // 当构建依赖的config文件(通过 require 依赖)内容发生变化时,缓存失效     },     name: '',  // 配置以name为隔离,创建不同的缓存文件,如生成PC或mobile不同的配置缓存     ..., }, </code></pre> <p>配置好后第二次构建速度快的飞起。<br> 注意事项:</p> <ul> <li> <p>cache 的属性 type 会在开发模式下被默认设置成 <code>memory</code>,而且在生产模式中被禁用,所以如果想要在生产打包时使用缓存需要显式的设置。</p> </li> <li> <p>为了防止缓存过于固定,导致更改构建配置无感知,依然使用旧的缓存,默认情况下,每次修改构建配置文件都会导致重新开始缓存。当然也可以自己主动设置 <code>version</code> 来控制缓存的更新。</p> </li> </ul> <h4>集成 Vant</h4> <pre><code>yarn add vant@next -S </code></pre> <ul> <li>按需引入</li> </ul> <pre><code>yarn add babel-plugin-import -D </code></pre> <ul> <li>修改配置</li> </ul> <pre><code>// babel.config.js const plugins = [     ['import', {         libraryName: 'vant',         libraryDirectory: 'es',         style: true     }, 'vant'] ] </code></pre> <ul> <li>vant 适配vw</li> </ul> <p>修改postcss.config.js</p> <pre><code>const path = require('path'); module.exports = ({file}) => {     const designWidth = file.includes(path.join('node_modules', 'vant')) ? 375 : 750;     return {         plugins: {             'postcss-px-to-viewport': {                 unitToConvert: 'px', // 需要转换的单位,默认为"px"                 viewportWidth: designWidth, //  设计稿的视口宽度                 unitPrecision: 5, // 单位转换后保留的精度                 propList: ['*'], // 能转化为vw的属性列表                 viewportUnit: 'vw', //  希望使用的视口单位                 fontViewportUnit: 'vw', // 字体使用的视口单位                 selectorBlackList: ['.ignore', '.hairlines', '.ig-'], // 需要忽略的CSS选择器                 minPixelValue: 1, // 最小的转换数值,如果为1的话,只有大于1的值会被转换                 mediaQuery: false, // 媒体查询里的单位是否需要转换单位                 replace: true, // 是否直接更换属性值,而不添加备用属性                 include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换,例如只转换 'src/mobile' 下的文件 (include: /\/src\/mobile\//)                 landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)                 landscapeUnit: 'vw', // 横屏时使用的单位                 landscapeWidth: 568 // 横屏时使用的视口宽度             }         }     } } </code></pre> <h4>wepback的可视化资源分析插件</h4> <pre><code>yarn add webpack-bundle-analyzer -D </code></pre> <p>用来分析哪些模块引入了哪些代码,进行有目的性的优化代码<br> 在打包脚本后面加<code>--analyze</code> 如<code>yarn build --analyze</code>,无需另外配置。新版本webpack-cli已经支持了。原文</p> <p><a href="http://img.e-com-net.com/image/info8/f0e86f21416c4dae8907f811371e963e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f0e86f21416c4dae8907f811371e963e.jpg" alt="基于 vue3 + webpack 5 + sass+ vw 适配方案+axios 封装,从0构建手机端模板脚手架_第1张图片" width="650" height="314" style="border:1px solid black;"></a></p> <h4>最后</h4> <p>不知道大家看完这篇文章,学废了吗。文章中若是有错误或者不准确的地方,欢迎大家指出讨论。</p> <h4>欢迎关注</h4> <p>欢迎关注小程序“<code>进阶的大前端</code>”,800多道前端面试题在线查看<br> <a href="http://img.e-com-net.com/image/info8/ebcb5482db0d45e78ed8fe2eadc4dc5f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/ebcb5482db0d45e78ed8fe2eadc4dc5f.jpg" alt="基于 vue3 + webpack 5 + sass+ vw 适配方案+axios 封装,从0构建手机端模板脚手架_第2张图片" width="430" height="430" style="border:1px solid black;"></a></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1527944584728965120"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(vue.js,vue,webpack)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950209116165173248.htm" title="uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)" target="_blank">uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)</a> <span class="text-muted">十一猫咪爱养鱼</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%BB%84%E4%BB%B6%E4%B8%8E%E5%8A%9F%E8%83%BD%28%E5%BC%80%E7%AE%B1%E5%8D%B3%E7%94%A8%29/1.htm">前端组件与功能(开箱即用)</a><a class="tag" taget="_blank" href="/search/uniapp%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">uniapp常见问题解决</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/uniapp3%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">uniapp3小程序授权登录</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%E6%95%99%E7%A8%8B/1.htm">微信小程序登录获取用户信息教程</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%98%B5%E7%A7%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E5%A4%B4%E5%83%8F%E4%BF%A1%E6%81%AF%E7%99%BB%E5%BD%95/1.htm">获取用户昵称手机号头像信息登录</a><a class="tag" taget="_blank" href="/search/vue3%E7%89%88%E6%9C%AC%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">vue3版本小程序平台授权登录</a><a class="tag" taget="_blank" href="/search/uniap%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AB%AF%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B5%81%E7%A8%8B/1.htm">uniap小程序端用户登录流程</a><a class="tag" taget="_blank" href="/search/uni%E5%AE%8C%E6%95%B4%E7%9A%84%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E7%99%BB%E5%BD%95%E6%BA%90%E7%A0%81/1.htm">uni完整的小程序平台登录源码</a> <div>效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是</div> </li> <li><a href="/article/1950191208873652224.htm" title="vue element 封装表单" target="_blank">vue element 封装表单</a> <span class="text-muted">影子信息</span> <a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进</div> </li> <li><a href="/article/1950179866523529216.htm" title="大学社团管理系统(11831)" target="_blank">大学社团管理系统(11831)</a> <span class="text-muted">codercode2022</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/java-rocketmq/1.htm">java-rocketmq</a> <div>有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!</div> </li> <li><a href="/article/1950164861182865408.htm" title="VUE 座位图功能+扩展" target="_blank">VUE 座位图功能+扩展</a> <span class="text-muted">NUZGNAW</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>1、通过循环画出页面座位图0"style="display:table;margin:0auto;min-height:472px;position:relative;">{{i.sign}}2、画出右下角的预览图3、编写对应js方法watch:{seatList:{handler(newVal,oldVal){if(this.seatList&&!stringBlank(this.seatLis</div> </li> <li><a href="/article/1950130692448907264.htm" title="Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录" target="_blank">Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录</a> <span class="text-muted">二倍速播放</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>1.迁移动机与技术选型1.1CSR架构的局限性基于Vue3和Vite构建的客户端渲染(CSR)单页应用(SPA)提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化(SEO):初始HTML响应仅包含一个根div元素,实际内容由JavaScript在浏览器端动态生成。虽然主流搜索引擎(如Google)能够执行部分JavaScript,但其抓取效率和稳定性不如直接获取完整HTML。非</div> </li> <li><a href="/article/1950126282490572800.htm" title="vue项目" target="_blank">vue项目</a> <span class="text-muted">阿什么名字不会重复呢</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>vue进行配置创建vue项目vuecreateone//one就是项目名字npmielement-ui--Snpmiaxios--savenpmiecharts--save配置main.jsimportVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'importstorefrom'./store'importElement</div> </li> <li><a href="/article/1950119980464926720.htm" title="开发避坑短篇(7):Vue+window.print()打印实践" target="_blank">开发避坑短篇(7):Vue+window.print()打印实践</a> <span class="text-muted">帧栈</span> <a class="tag" taget="_blank" href="/search/%E9%81%BF%E5%9D%91%E6%8C%87%E5%8D%97/1.htm">避坑指南</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a> <div>需求vue项目中如何打印当前页面内容?解决办法使用浏览器原生APIwindow.print(),这是最简单直接的方式,通过调用window.print()方法触发浏览器打印功能‌。在vue项目中直接调用print()方法即可,无须引入任何插件。如下:functionhandlePrint(){setTimeout(_=>print(),500)}打印页面样式控制可以使用@mediaprint来控制</div> </li> <li><a href="/article/1950099932132208640.htm" title="vue2中实现leader-line-vue连线文章对应字符" target="_blank">vue2中实现leader-line-vue连线文章对应字符</a> <span class="text-muted">小莉爱编程</span> <a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/bug%E8%AE%B0%E5%BD%95/1.htm">bug记录</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>效果展示通过点击右边的tag,触发连接操作第一步:获取右边tag展示1.右边的tag列表展示,我这边是分为两个list嵌套的数据结构;{"人员":[{</div> </li> <li><a href="/article/1950071444180365312.htm" title="【antdv4.0FormItem更新tooltip属性引发的思考】" target="_blank">【antdv4.0FormItem更新tooltip属性引发的思考】</a> <span class="text-muted"></span> <div>北京时间2023-10-19,ant-design-vue最近发布了4.0.4-4.0.6的小版本更新,其中4.0.4新增了对Form组件中FormItem的tooltip属性支持,这个功能我觉得在后台管理场景下还是非常实用的,tooltip属性作用于FormItem中的FormItemLabel区域,用来配置提示信息,当用户不确定该行的用处或者不知道填什么内容时,可以作为input里placeh</div> </li> <li><a href="/article/1950060071656419328.htm" title="webpack 浅谈系列之 Loader" target="_blank">webpack 浅谈系列之 Loader</a> <span class="text-muted">KimYYX</span> <div>webpack拥有六大核心部分:Entry、Output、Loaders、Plugins、Mode、BrowserCompatibility,这里就我的理解来稍微聊聊Loaders这个部分。1.认识Loader先放出我对loader的理解:Loader是用来逐个处理指定类型的文件。emmm...下面我们对上面那句话稍微解释下。首先我们要先明确,一个Loader是如何在webpack中配置的,见下面</div> </li> <li><a href="/article/1950057579757498368.htm" title="零基础入门uniapp Vue3组合式API版本" target="_blank">零基础入门uniapp Vue3组合式API版本</a> <span class="text-muted">鹤早早</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>前言:小程序学习笔记,课程来源up主咸虾米_。仅记录笔记,大家想学习可以去关注他。1.已安装HBuiderX(目前是4.36版本),微信开发者工具(但还没注册小程序码),相关配置OK了。1.16相关架构学习1.pages-index-index.vuebox1box2.layout{border:1pxsolidred;.box1{border:1pxsolidgreen;}.box2{borde</div> </li> <li><a href="/article/1950055310613868544.htm" title="Vue3组合API初体验" target="_blank">Vue3组合API初体验</a> <span class="text-muted">DTcode7</span> <a class="tag" taget="_blank" href="/search/Vue%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/1.htm">Vue实战指南</a><a class="tag" taget="_blank" href="/search/VUE/1.htm">VUE</a><a class="tag" taget="_blank" href="/search/HTML/1.htm">HTML</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/vue%E6%A1%86%E6%9E%B6/1.htm">vue框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Vue3组合API初体验基本概念与作用说明示例一:使用ref创建响应式数据示例二:使用reactive创建响应式对象示例三:使用computed计算属性示例四:使用watch监听数据变化示例五:使用provide/inject进行父子组件间通信功能使用思路与实际开发技巧1.何时使用ref与reactive?2.如何在组合式API中保持逻辑的清晰?3.如何处理异步操作?随着Vue3的发布,组合式AP</div> </li> <li><a href="/article/1950053798433058816.htm" title="页面开发样式和布局入门:Vite + Vue 3 + Less" target="_blank">页面开发样式和布局入门:Vite + Vue 3 + Less</a> <span class="text-muted"></span> <div>页面开发样式和布局入门:Vite+Vue3+Less引言在现代前端开发中,样式和布局是页面开发的核心部分。随着技术的不断发展,Vite、Vue3和Less等工具和框架的出现,使得前端开发变得更加高效和灵活。然而,尽管这些工具和框架提供了强大的功能,但在实际开发中仍然会遇到各种样式和布局的问题。本文将结合Vite、Vue3和Less,详细介绍在页面开发中常见的样式和布局问题,并提供解决方案和最佳实践</div> </li> <li><a href="/article/1950039673418084352.htm" title="解决 Webpack 报错 “No module factory available for dependency type: CssDependency“ 的方法" target="_blank">解决 Webpack 报错 “No module factory available for dependency type: CssDependency“ 的方法</a> <span class="text-muted">cmmav33990</span> <a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>这个错误表明Webpack在处理CSS依赖时找不到合适的模块工厂,通常发生在配置不完整或依赖冲突的情况下。以下是详细的解决方案:核心解决方案方案1:安装并配置正确的CSS处理器(最推荐)bashnpminstall--save-devcss-loaderstyle-loader#或使用mini-css-extract-plugin替代style-loadernpminstall--save-dev</div> </li> <li><a href="/article/1950005757994921984.htm" title="50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Pokedex(宝可梦图鉴)" target="_blank">50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Pokedex(宝可梦图鉴)</a> <span class="text-muted"></span> <div>我们继续50个小项目挑战!——Pokedex组件仓库地址:https://github.com/SunACong/50-vue-projects项目预览地址:https://50-vue-projects.vercel.app/使用Vue3结合PokeAPI来创建一个炫酷的宝可梦图鉴应用。通过这个项目,你将能够浏览前150只宝可梦的信息,包括它们的名字、类型、身高、体重以及能力等。而且,每只宝可梦</div> </li> <li><a href="/article/1950002983613820928.htm" title="前端基础知识Vue3系列 - 04(Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同)" target="_blank">前端基础知识Vue3系列 - 04(Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同)</a> <span class="text-muted"></span> <div>开始之前CompositionAPI可以说是Vue3的最大特点,那么为什么要推出CompositionApi,解决了什么问题?通常使用Vue2开发的项目,普遍会存在以下问题:代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺点TypeScript支持有限以上通过使用CompositionApi都能迎刃而解正文一、OptionsApiOptionsAPI,即大家常说的选项API,即以vue</div> </li> <li><a href="/article/1949993268787867648.htm" title="Vue3判断对象是否为空方法" target="_blank">Vue3判断对象是否为空方法</a> <span class="text-muted">滿</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1、Object.keys()检查对象自身可枚举属性的数量:constisEmpty=Object.keys(obj).length===0;2、JSON.stringify()将对象转为JSON字符串判断:constisEmpty=JSON.stringify(obj)==='{}';3、Reflect.ownKeys()(包含Symbol属性)constisEmpty=Reflect.ownK</div> </li> <li><a href="/article/1949984445817745408.htm" title="Vue 工程化开发入门" target="_blank">Vue 工程化开发入门</a> <span class="text-muted">dawn191228</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/1.htm">前端学习</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>文章目录一、Vue工程化开发概述二、Vue脚手架三、项目运行流程四、组件化开发五、组件注册六、总结在当今的前端开发领域,Vue.js以其简洁、高效的特性受到了广泛的欢迎。Vue的工程化开发能够帮助我们更好地组织和管理项目,提高开发效率和代码质量。本文将带你了解Vue工程化开发入门知识,包括脚手架、项目运行流程、组件化以及组件注册。一、Vue工程化开发概述工程化开发是一种将软件开发过程规范化、标准化</div> </li> <li><a href="/article/1949966916076498944.htm" title="vue 使用 iFrame 嵌套带有登录的网站 登录成功 无法跳转" target="_blank">vue 使用 iFrame 嵌套带有登录的网站 登录成功 无法跳转</a> <span class="text-muted">WHY<=小氣鬼=></span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>这个问题有点好玩,当时做的时候没想起来,哎不说讲一下问题1.项目在使用iFrame标签嵌套其他,网址或者自己的网址的时候如果没有登录只是浏览是没有问题的2.如个你使用Frame标签嵌套的网址是带有登录的需要注意两个网站是不是在统一域名下面如果在就可以正常登录,如果不在的话会出现登录成功但是无法跳转的问题3.在Vue项目中使用iFrame嵌套本地.html文件,本地.html文件向父页面抛出的方法或</div> </li> <li><a href="/article/1949932110080962560.htm" title="webpack 配置 style-loader时出现错误:Module build failed (from ../node_modules/style-loader/dist/cjs.js)" target="_blank">webpack 配置 style-loader时出现错误:Module build failed (from ../node_modules/style-loader/dist/cjs.js)</a> <span class="text-muted">.ToString()°</span> <a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/es6%2Fes7/1.htm">es6/es7</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>webpack配置style-loader时出现错误,Modulebuildfailed(from…/node_modules/style-loader/dist/cjs.js):TypeError:this.getOptionsisnotafunctionatObject.loader1.确保loader配置中的顺序,loader的执行顺序是从右到左,从下到上的,这里要注意style-loade</div> </li> <li><a href="/article/1949925685418061824.htm" title="Vue3中Axios的使用-附完整代码" target="_blank">Vue3中Axios的使用-附完整代码</a> <span class="text-muted">【本人】</span> <a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>前言首先介绍一下什么是axiosAxios是一个基于promise网络请求库,作用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.jshttp模块,而在客户端(浏览端)则使用XMLHttpRequests官方网站:Axios中文文档|Axios中文网目前官方最新版本1.8.4一、Axios优势1.简单易用Axio</div> </li> <li><a href="/article/1949918371738873856.htm" title="vue 进入一个页面,然后离开这个页面他就重新加载" target="_blank">vue 进入一个页面,然后离开这个页面他就重新加载</a> <span class="text-muted">Java&Develop</span> <a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a> <div>vue进入一个页面,然后离开这个页面他就重新加载这个代码导致的注释即可window.location.reload();window.location.reload()是JavaScript中的一个方法,用于强制刷新当前页面(重新加载页面内容)。其作用类似于用户手动点击浏览器的刷新按钮,但可以通过代码精确触发。核心作用:刷新页面重新加载当前显示的文档(即重新请求当前URL的资源)。可选参数控制缓存</div> </li> <li><a href="/article/1949892598973919232.htm" title="webpack实用教程" target="_blank">webpack实用教程</a> <span class="text-muted">前端的爬行之旅</span> <div>packjson.js终端输入$npminit-y{"name":"2","version":"1.0.0","description":"","main":"webpack.config.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1",},"keywords":[],"author":"","license":"ISC",</div> </li> <li><a href="/article/1949892134148567040.htm" title="在vue项目中嵌入Python项目" target="_blank">在vue项目中嵌入Python项目</a> <span class="text-muted">钱亚锋</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>在Vue项目中嵌入Python项目在现代Web开发中,前后端分离的架构已成为一种流行趋势。前端使用现代化框架(如Vue.js)来构建用户界面,而后端则使用其他语言(如Python)来处理复杂的业务逻辑和数据库交互。将Python项目嵌入到Vue项目中,可以有效利用两种语言的优势,提升开发效率。本文将介绍如何在Vue项目中集成Python项目,并附带代码示例和可视化工具。流程概述在将Python项目</div> </li> <li><a href="/article/1949891250945585152.htm" title="python和vue结合开发前端_Python--前端之路-----Vue" target="_blank">python和vue结合开发前端_Python--前端之路-----Vue</a> <span class="text-muted"></span> <div>Vue导入Vue创建vue对象加载后执行:绑定:varvm=newVue({el:"#标签的id,此处类似于选择器",属性,方法})属性:data:{属性1:"值1",属性2:值2,属性:true}方法:methods:{方法名1:function(){执行内容},方法名2:function(){执行内容}}监听:watch:{属性名:function(){监听vue属性的数据变化,属性发生修改执</div> </li> <li><a href="/article/1949890746580529152.htm" title="vue3的一些浅显用法" target="_blank">vue3的一些浅显用法</a> <span class="text-muted"></span> <div>1/父页面调用子页面相关需要在父页面引用其中FieldUserForm是子页面@success="handleUserFormSuccess"是子页面成功后回调方法父页面实现handleUserFormSuccess方法子页面相关://暴露方法给父组件defineExpose({open})需要写个方法暴露给父组件,子页面实现open方法相当于初始加载类2子页面完成任务后调用子页面相关//定义em</div> </li> <li><a href="/article/1949889359373201408.htm" title="python和vue结合开发前端,请手动配置Vue开发环境" target="_blank">python和vue结合开发前端,请手动配置Vue开发环境</a> <span class="text-muted">小六oO</span> <a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%86%99%E4%BD%9C/1.htm">智能写作</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>vue怎么全局定义一个变量代替路径。原理:设置一个专用的的全局变量模块文件,模块里面定义一些变量初始状态,用exportdefault暴露出去,在里面使用Vue.prototype挂载到vue实例上面或者在其它地方需要使用时,引入该模块便可。全局变量模块文件:文件:constserverSrc='';consttoken='12345678';consthasEnter=false;constus</div> </li> <li><a href="/article/1949820012533444608.htm" title="Java+Vue 地下停车场管理系统的设计与实现" target="_blank">Java+Vue 地下停车场管理系统的设计与实现</a> <span class="text-muted">不若浮生一梦</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E8%AE%BE/1.htm">计算机毕设</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、项目简介本项目是一款基于SpringBoot+Vue开发的地下停车场管理系统,采用前后端分离架构,后端使用MyBatis操作MySQL数据库,前端使用Vue进行页面展示和用户交互。系统涵盖车位监控、车辆登记、订单生成与结算、在线支付、公告通知、留言反馈、用户积分管理等模块,支持用户端和管理员端的全流程停车管理,适用于中小型停车场数字化转型。项目定位:提升停车场管理效率与用户体验,实现“高效停车</div> </li> <li><a href="/article/1949814878260752384.htm" title="SSM+Vue共享充电宝管理系统 充电宝投放管理系统 共享充电宝维护管理系统Java" target="_blank">SSM+Vue共享充电宝管理系统 充电宝投放管理系统 共享充电宝维护管理系统Java</a> <span class="text-muted">计算机程序老哥</span> <div>作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SSM(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登陆前端页面功能:首页、合作商户、充电宝投放、公告栏、个人中心、后台管理首页.png充电宝投放.png</div> </li> <li><a href="/article/1949757224490430464.htm" title="Vue 浏览器本地存储" target="_blank">Vue 浏览器本地存储</a> <span class="text-muted">yume_sibai</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>一、webStorage1.存储内容大小一般支持5MB左右(不同浏览器可能不一样)。2.浏览器通过Window.sessionStorage和Window.localStorage属性来实现本地存储机制。3.相关API:(1).xxxxStorage.setItem('Key','value'):该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值。(2).xxxx</div> </li> <li><a href="/article/115.htm" title="C/C++Win32编程基础详解视频下载" target="_blank">C/C++Win32编程基础详解视频下载</a> <span class="text-muted">择善Zach</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/Win32/1.htm">Win32</a> <div>课题视频:C/C++Win32编程基础详解 视频知识:win32窗口的创建                   windows事件机制 主讲:择善Uncle老师 学习交流群:386620625 验证码:625 --</div> </li> <li><a href="/article/242.htm" title="Guava Cache使用笔记" target="_blank">Guava Cache使用笔记</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/guava/1.htm">guava</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a> <div>1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常 我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。 实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。 2.Guava</div> </li> <li><a href="/article/369.htm" title="解决ora-01652无法通过128(在temp表空间中)" target="_blank">解决ora-01652无法通过128(在temp表空间中)</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程 一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。 分析过程:    既然是temp表空间有问题,那当</div> </li> <li><a href="/article/496.htm" title="Struct在jsp标签" target="_blank">Struct在jsp标签</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/struct/1.htm">struct</a> <div>非UI标签介绍: 控制类标签: 1:程序流程控制标签   if   elseif    else <s:if test="isUsed"> <span class="label label-success">True</span> </</div> </li> <li><a href="/article/623.htm" title="按对象属性排序" target="_blank">按对象属性排序</a> <span class="text-muted">换个号韩国红果果</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E8%B1%A1%E6%8E%92%E5%BA%8F/1.htm">对象排序</a> <div>利用JavaScript进行对象排序,根据用户的年龄排序展示 <script> var bob={ name;bob, age:30 } var peter={ name;peter, age:30 } var amy={ name;amy, age:24 } var mike={ name;mike, age:29 } var john={ </div> </li> <li><a href="/article/750.htm" title="大数据分析让个性化的客户体验不再遥远" target="_blank">大数据分析让个性化的客户体验不再遥远</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a> <div>顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。 分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。 然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实</div> </li> <li><a href="/article/877.htm" title="java笔记4" target="_blank">java笔记4</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>操作符 1,使用java操作符       操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。       操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的</div> </li> <li><a href="/article/1004.htm" title="从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序" target="_blank">从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0/1.htm">嵌入式学习</a> <div>    笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。     笔者因此写上自己的学习心得,希望能给和我一样转变</div> </li> <li><a href="/article/1131.htm" title="在springmvc中解决FastJson循环引用的问题" target="_blank">在springmvc中解决FastJson循环引用的问题</a> <span class="text-muted">asialee</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E5%BC%95%E7%94%A8/1.htm">循环引用</a><a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a> <div>          我们先来看一个例子:           package com.elong.bms; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import co</div> </li> <li><a href="/article/1258.htm" title="ArrayAdapter和SimpleAdapter技术总结" target="_blank">ArrayAdapter和SimpleAdapter技术总结</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/SimpleAdapter/1.htm">SimpleAdapter</a><a class="tag" taget="_blank" href="/search/ArrayAdapter/1.htm">ArrayAdapter</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80/1.htm">高级组件基础</a> <div>ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果   ArrayAdapter;的数据可以是数组或者是队列        // 获得下拉框对象 AutoCompleteTextView textview = (AutoCompleteTextView) this </div> </li> <li><a href="/article/1385.htm" title="九封信" target="_blank">九封信</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a><a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97/1.htm">励志</a> <div>        有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。         2014,写给人</div> </li> <li><a href="/article/1512.htm" title="Linux下安装MySQL Web 管理工具phpMyAdmin" target="_blank">Linux下安装MySQL Web 管理工具phpMyAdmin</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/phpMyAdmin/1.htm">phpMyAdmin</a> <div>PHP http://php.net/ phpMyAdmin http://www.phpmyadmin.net Error compiling PHP on CentOS x64   一、安装Apache 请参阅http://billben.iteye.com/admin/blogs/1985244   二、安装依赖包 sudo yum install gd </div> </li> <li><a href="/article/1639.htm" title="分布式系统理论" target="_blank">分布式系统理论</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>FLP One famous theory in distributed computing, known as FLP after the authors Fischer, Lynch, and Patterson, proved that in a distributed system with asynchronous communication and process crashes, </div> </li> <li><a href="/article/1766.htm" title="ssh2整合(spring+struts2+hibernate)-附源码" target="_blank">ssh2整合(spring+struts2+hibernate)-附源码</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a> <div>最近抽空又整理了一套ssh2框架,主要使用的技术如下: spring做容器,管理了三层(dao,service,actioin)的对象 struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常 hibernate与数据库交互 BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说 MySql数据库   项目用eclipse</div> </li> <li><a href="/article/1893.htm" title="treetable bug记录" target="_blank">treetable bug记录</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/table/1.htm">table</a> <div>// 插入子节点删除再插入时不能正常显示。修改: //不知改后有没有错,先做个备忘 Tree.prototype.removeNode = function(node) { // Recursively remove all descendants of +node+ this.unloadBranch(node); // Remove</div> </li> <li><a href="/article/2020.htm" title="编程之美-电话号码对应英语单词" target="_blank">编程之美-电话号码对应英语单词</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.Arrays; public class NumberToWord { /** * 编程之美 电话号码对应英语单词 * 题目: * 手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ, * 要求对一段数字,输出其代表的所有可能的字母组合</div> </li> <li><a href="/article/2147.htm" title="jquery ajax读书笔记" target="_blank">jquery ajax读书笔记</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/jQuery+ajax/1.htm">jQuery ajax</a> <div>1、jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()</div> </li> <li><a href="/article/2274.htm" title="JWFD工作流拓扑结构解析伪码描述算法" target="_blank">JWFD工作流拓扑结构解析伪码描述算法</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/J%23/1.htm">J#</a> <div>  对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析   /*  流程图拓扑结构解析伪码描述算法         public java.util.ArrayList DFS(String graphid, String stepid, int j) </div> </li> <li><a href="/article/2401.htm" title="oracle I/O 从属进程" target="_blank">oracle I/O 从属进程</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>I/O 从属进程   I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会</div> </li> <li><a href="/article/2528.htm" title="高级排序:希尔排序" target="_blank">高级排序:希尔排序</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F/1.htm">希尔排序</a> <div> public void shellSort(int[] array){ int limit = 1; int temp; int index; while(limit <= array.length/3){ limit = limit * 3 + 1; </div> </li> <li><a href="/article/2655.htm" title="初二下学期难记忆单词" target="_blank">初二下学期难记忆单词</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a> <div>kitchen 厨房 cupboard 厨柜 salt 盐 sugar 糖 oil 油 fork 叉;餐叉 spoon 匙;调羹 chopsticks 筷子 cabbage 卷心菜;洋白菜 soup 汤 Italian 意大利的   Indian 印度的 workplace  工作场所 even 甚至;更 Italy 意大利 laugh 笑 m</div> </li> <li><a href="/article/2782.htm" title="Go语言使用MySQL数据库进行增删改查" target="_blank">Go语言使用MySQL数据库进行增删改查</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: http://code.google.c...o-mysql-dri</div> </li> <li><a href="/article/2909.htm" title="git命令" target="_blank">git命令</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>---------------设置全局用户名: git config --global user.name "HanShuliang" //设置用户名 git config --global user.email "13241153187@163.com" //设置邮箱 ---------------查看环境配置 git config --li</div> </li> <li><a href="/article/3036.htm" title="qemu-kvm 网络 nat模式 (四)" target="_blank">qemu-kvm 网络 nat模式 (四)</a> <span class="text-muted">haoningabc</span> <a class="tag" taget="_blank" href="/search/kvm/1.htm">kvm</a><a class="tag" taget="_blank" href="/search/qemu/1.htm">qemu</a> <div>qemu-ifup-NAT #!/bin/bash BRIDGE=virbr0 NETWORK=192.168.122.0 GATEWAY=192.168.122.1 NETMASK=255.255.255.0 DHCPRANGE=192.168.122.2,192.168.122.254 TFTPROOT= BOOTP= function check_bridge() </div> </li> <li><a href="/article/3163.htm" title="不要让未来的你,讨厌现在的自己" target="_blank">不要让未来的你,讨厌现在的自己</a> <span class="text-muted">jingjing0907</span> <a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB+%E5%A5%8B%E6%96%97+%E5%B7%A5%E4%BD%9C+%E6%A2%A6%E6%83%B3/1.htm">生活 奋斗 工作 梦想</a> <div> 故事one  23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。    24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙;    25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌</div> </li> <li><a href="/article/3290.htm" title="枚举类型详解" target="_blank">枚举类型详解</a> <span class="text-muted">一路欢笑一路走</span> <a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE%E8%AF%A6%E8%A7%A3/1.htm">枚举详解</a><a class="tag" taget="_blank" href="/search/enumset/1.htm">enumset</a><a class="tag" taget="_blank" href="/search/enumMap/1.htm">enumMap</a> <div>枚举类型详解 一.Enum详解      1.1枚举类型的介绍   JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。      Demo:一个最简单的枚举类   public enum ColorType { RED</div> </li> <li><a href="/article/3417.htm" title="第11章 动画效果(上)" target="_blank">第11章 动画效果(上)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a> <div>index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/</div> </li> <li><a href="/article/3544.htm" title="Eclipse中jsp、js文件编辑时,卡死现象解决汇总" target="_blank">Eclipse中jsp、js文件编辑时,卡死现象解决汇总</a> <span class="text-muted">ljf_home</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jsp%E5%8D%A1%E6%AD%BB/1.htm">jsp卡死</a><a class="tag" taget="_blank" href="/search/js%E5%8D%A1%E6%AD%BB/1.htm">js卡死</a> <div>使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下:   1、取消验证 windows–>perferences–>validation 把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida</div> </li> <li><a href="/article/3671.htm" title="MySQL编程中的6个重要的实用技巧" target="_blank">MySQL编程中的6个重要的实用技巧</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>每一行命令都是用分号(;)作为结束 对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如: mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')"); </div> </li> <li><a href="/article/3798.htm" title="zoj 3820 Building Fire Stations(二分+bfs)" target="_blank">zoj 3820 Building Fire Stations(二分+bfs)</a> <span class="text-muted">阿尔萨斯</span> <a class="tag" taget="_blank" href="/search/Build/1.htm">Build</a> <div> 题目链接:zoj 3820 Building Fire Stations 题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。 解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>