nuxt3:我们开始吧-开发-配置-部署

一、背景介绍

2022 年 11 月 16 日,全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行,并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于 ViteVue3 和 Nitro 的 Nuxt 框架的现代重写,具有一流的 Typescript 支持,是两年多研究、社区反馈、创新和实验的结果。为每个人提供了一个愉快的 Vue 全栈开发体验。

因为nuxt优越的服务端渲染能力,所以对于nuxt3项目关注已久!我们开始吧!

nuxt3:我们开始吧-开发-配置-部署_第1张图片

二、官方网址

Nuxt 3 - 中文文档

Nuxt - The Intuitive Vue Framework

Announcing 3.0 · Nuxt

Nuxt - Installation

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

三、新特性介绍

1、更轻量:以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍
2、更快:基于 nitro 提供动态代码分割能力,以优化冷启动性能
3、Hybrid:增量静态生成和其他的高级功能现在都成为可能
4、Suspense:在任意组件和导航前后都可以获取数据
5、Composition API:使用 Composition API 和 Nuxt 3 的 composables 实现真正的代码复用
6、Nuxt CLI:没有任何依赖,帮你轻松搭建项目和集成模块
7、Nuxt Devtools:通过直接在浏览器中查看信息和快速修复实现更快地工作
8、Nuxt Kit:具有 Typescript 和跨版本兼容性的全新模块开发
9、Webpack 5:更快的构建时间和更小的包大小,无需配置
10、Vite:使用 Vite 作为打包工具,体验闪电般快速的 HMR
11、Vue 3:Vue 3 是你下一个 Web 应用程序的坚实基础
12、TypeScript:使用原生 TypeScript 和 ESM 构建,无需额外步骤

Nuxt 3.0 稳定版正式发布,基于 Vue 3 的 Web 框架

四、重要概念

SPA应用:也就是单页应用,这些多是在客户端的应用,不能进行SEO优化(搜索引擎优化)。

SSR应用:在服务端进行渲染,渲染完成后返回给客户端,每个页面有独立的URL,对SEO友好。

约定式路由:不需要配置路由,在根目录pages目录下创建业务页面,即可访问。

约定式配置:如layouts布局、middleware、plugins

五、启动基础项目

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

5.1、创建项目:

创建nuxt3项目:

pnpm dlx nuxi init nuxt-app

 npx nuxi init nuxt3-app

5.2、安装依赖

pnpm install --shamefully-hoist

5.3、启动项目

nuxt3:我们开始吧-开发-配置-部署_第2张图片

启动成功

六、项目配置、基础使用

6.1、访问pages/index.vue

根目录app.vue,替换为:


pages/index.vue





pages/about.vue  





这样就可以访问页面了:

nuxt3:我们开始吧-开发-配置-部署_第3张图片

nuxt3:我们开始吧-开发-配置-部署_第4张图片

6.2、动态路由

6.2.1、目录结构

nuxt3:我们开始吧-开发-配置-部署_第5张图片

6.2.2、访问:/user

如果没有pages/user/index页面,只有[id].vue,访问的时候式404页面

nuxt3:我们开始吧-开发-配置-部署_第6张图片

6.2.3、访问:/user/1,动态路由,获取动态路由参数

{{$route.params.id}}

nuxt3:我们开始吧-开发-配置-部署_第7张图片

6.2.4、访问:/user/1?name=snow,动态路由,获取路由普通参数:

{{$route.query.name}}

nuxt3:我们开始吧-开发-配置-部署_第8张图片

 6.2.5、通过useRoute()获取路由信息

const route = useRoute()





nuxt3:我们开始吧-开发-配置-部署_第9张图片

6.3、路由跳转

经过测试一下几种方式均成功跳转。页面内容均正常展示。

6.3.1、

user-id

6.3.2、 

user-id-2

6.3.3、

user-id-3

6.3.4、编程式路由

6.4、加载静态资源

nginx nginx

nuxt3:我们开始吧-开发-配置-部署_第10张图片

 nuxt项目tsconfig.json有配置,public目录下的文件可以省略/public目录,我这里测试不可以,后续会再研究

已测试成功,可以省略 “~/public” 目录

nuxt3:我们开始吧-开发-配置-部署_第11张图片

6.5、设置页面title,不会在页面展示,只会在页面title部分展示

6.5.1、

snow-title





如图:

nuxt3:我们开始吧-开发-配置-部署_第12张图片

 ctrl + u:

nuxt3:我们开始吧-开发-配置-部署_第13张图片

 6.5.2、使用useHead()方法

useHead({
    title: 'snow-title-2'
})

nuxt3:我们开始吧-开发-配置-部署_第14张图片

设置成功,useHead优先级小于标签。</p> <p>6.5.3、同理使用useHead设置页面的TDK信息</p> <pre><code><script setup lang="ts"> useHead({ title: 'snow-title-2', meta: [ { name: 'description', content: 'snow-desc'}, { name: 'keywords', content: 'snow-kw'} ] }) </script></code></pre> <p><a href="http://img.e-com-net.com/image/info8/28feda428ad04292ae8d512117060bbb.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第15张图片" height="151" src="http://img.e-com-net.com/image/info8/28feda428ad04292ae8d512117060bbb.jpg" width="650" style="border:1px solid black;"></a></p> <p></p> <p><strong>6.6、layouts</strong></p> <p>6.6.1、理解:布局、页面布局、公共布局、基础布局</p> <p>6.6.2、根目录创建layouts目录,/layouts/default.vue</p> <pre><code><template> <div> snow-default-layout </div> <slot /> </template> <script setup lang="ts"> </script> <style scoped> </style> </code></pre> <p>6.6.3、app.vue</p> <pre><code><template> <NuxtLayout> <NuxtPage/> </NuxtLayout> <!-- <div> <NuxtWelcome /> </div> --> </template> </code></pre> <p><a href="http://img.e-com-net.com/image/info8/5e0c738cc7ff4947a39b71d5521150b8.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第16张图片" height="350" src="http://img.e-com-net.com/image/info8/5e0c738cc7ff4947a39b71d5521150b8.jpg" width="650" style="border:1px solid black;"></a></p> <p> 6.6.4、</p> <p><a href="http://img.e-com-net.com/image/info8/d9d2760b5960465280edf516cadaa55c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第17张图片" height="265" src="http://img.e-com-net.com/image/info8/d9d2760b5960465280edf516cadaa55c.jpg" width="648" style="border:1px solid black;"></a></p> <p> 6.6.5、某页面不想使用layout:</p> <pre><code>definePageMeta({ layout: false })</code></pre> <p>6.6.6、某页面使用指定layout</p> <p><a href="http://img.e-com-net.com/image/info8/bf4cc197e2dd45c696bdbe70ac94a509.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第18张图片" height="236" src="http://img.e-com-net.com/image/info8/bf4cc197e2dd45c696bdbe70ac94a509.jpg" width="539" style="border:1px solid black;"></a></p> <pre><code>definePageMeta({ layout: 'layout-snow' })</code></pre> <p>  6.6.7、动态设置layout</p> <pre><code>const router = useRoute() function enableLayout () { router.meta.layout = "layout-snow" }</code></pre> <p>6.6.8、全局设置,指定layout</p> <pre><code><template> <NuxtLayout :name="layoutSnow"> <NuxtPage/> </NuxtLayout> <!-- <div> <NuxtWelcome /> </div> --> </template> <script setup lang="ts"> const layoutSnow = ref("layout-snow") </script></code></pre> <p><strong>6.7、plugins</strong></p> <p>/plugins/index.ts</p> <pre><code>export default defineNuxtPlugin(()=>{ return { provide: { hello: (msg: string) => `hello ${msg}` } } })</code></pre> <p>/pages/plugin.vue</p> <pre><code><template> <div> snow-plugin </div> </template> <script setup lang="ts"> const { $hello } = useNuxtApp() console.log('9', $hello('world')) </script> <style scoped> </style> </code></pre> <p><a href="http://img.e-com-net.com/image/info8/8bb018b4e9734c25b43bdddd0bbd93ef.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第19张图片" height="343" src="http://img.e-com-net.com/image/info8/8bb018b4e9734c25b43bdddd0bbd93ef.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.8、middleware</strong></p> <p>/middleware/auth.ts</p> <pre><code>export default defineNuxtRouteMiddleware((to, from)=>{ console.log("auth") }) </code></pre> <p>/middleware/snow.ts</p> <pre><code>export default defineNuxtRouteMiddleware((to, from)=>{ console.log("snow") }) </code></pre> <p>/pages/plugin.vue</p> <pre><code><template> <div> snow-plugin </div> </template> <script setup lang="ts"> definePageMeta({ middleware: ["auth", "snow"] }) </script> <style scoped> </style> </code></pre> <p> 如图:</p> <p><a href="http://img.e-com-net.com/image/info8/ccc8d7249e7f4ef2ab88c84f87cb65d5.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第20张图片" height="389" src="http://img.e-com-net.com/image/info8/ccc8d7249e7f4ef2ab88c84f87cb65d5.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.9、server</strong></p> <p>6.9.1、目录</p> <p><a href="http://img.e-com-net.com/image/info8/f1239c77a7db4934a53b93ff4033ffb7.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第21张图片" height="283" src="http://img.e-com-net.com/image/info8/f1239c77a7db4934a53b93ff4033ffb7.jpg" width="371" style="border:1px solid black;"></a></p> <p>6.9.2、server/api/hello.ts</p> <pre><code>export default defineEventHandler((event) => { return { api: "works" } })</code></pre> <p> <a href="http://img.e-com-net.com/image/info8/40c19b19c51341128a55816d95db4519.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第22张图片" height="277" src="http://img.e-com-net.com/image/info8/40c19b19c51341128a55816d95db4519.jpg" width="485" style="border:1px solid black;"></a></p> <p> 6.9.3、server/api/test.get.ts</p> <pre><code>export default defineEventHandler((event) => { return `test get ts` })</code></pre> <p><a href="http://img.e-com-net.com/image/info8/b74e6fe077bd48c0bade5fc5220b196c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第23张图片" height="197" src="http://img.e-com-net.com/image/info8/b74e6fe077bd48c0bade5fc5220b196c.jpg" width="440" style="border:1px solid black;"></a></p> <p>6.9.4、server/api/test.post.ts</p> <pre><code>export default defineEventHandler((event) => { return `test post ts` })</code></pre> <p>post请求需要使用postman工具: </p> <p><a href="http://img.e-com-net.com/image/info8/e366e15fe09e479aa9086f7b464819fd.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第24张图片" height="349" src="http://img.e-com-net.com/image/info8/e366e15fe09e479aa9086f7b464819fd.jpg" width="650" style="border:1px solid black;"></a></p> <p>6.9.5、 server/api/foo/[...].ts</p> <p>可以带有参数</p> <pre><code>export default defineEventHandler(() => `default api handle`)</code></pre> <p> <a href="http://img.e-com-net.com/image/info8/885db5cfa9794b2f9f2fea9a003bed1c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第25张图片" height="213" src="http://img.e-com-net.com/image/info8/885db5cfa9794b2f9f2fea9a003bed1c.jpg" width="510" style="border:1px solid black;"></a></p> <p> 6.9.6、server/api/submit.post.ts</p> <pre><code>export default defineEventHandler (async (event) => { const body = await readBody(event); return { body } }) </code></pre> <p><a href="http://img.e-com-net.com/image/info8/6d0f261472f244f5941bc23112cd5348.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第26张图片" height="349" src="http://img.e-com-net.com/image/info8/6d0f261472f244f5941bc23112cd5348.jpg" width="650" style="border:1px solid black;"></a></p> <p></p> <p> 6.9.7、server/api/query.get.ts</p> <pre><code>export default defineEventHandler((event) => { const query = getQuery(event) return { a: query.param1, b: query.param2 } })</code></pre> <p><a href="http://img.e-com-net.com/image/info8/fddc967c895c4633a031914fc11d7df8.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第27张图片" height="594" src="http://img.e-com-net.com/image/info8/fddc967c895c4633a031914fc11d7df8.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.10、使用element-plus</strong></p> <p>6.10.1、安装</p> <blockquote> <p>pnpm install element-plus </p> </blockquote> <blockquote> <p>pnpm add  sass sass-loader -D</p> </blockquote> <blockquote> <p>pnpm add unplugin-auto-import unplugin-icons unplugin-vue-components -D</p> </blockquote> <p>6.10.2、package.json</p> <pre><code>{ "private":true, "scripts":{ "build":"nuxt build", "dev":"nuxt dev", "generate":"nuxt generate", "preview":"nuxt preview", "postinstall":"nuxt prepare" }, "devDependencies":{ "nuxt":"3.0.0", "sass":"1.57.1", "sass-loader":"13.2.8", "unplugin-auto-import":".12.1", "unplugin-icons":".14.15", "unplugin-vue-components":".22.12" }, "dependencies":{ "element-plus":"^2 .2.27" } }</code></pre> <p>6.10.3、assets/scss/index.scss</p> <pre><code>@use "element-plus/dist/index.css";</code></pre> <p>6.10.4、tsconfig.json</p> <pre><code>{ // https://nuxt.com/docs/guide/concepts/typescript "extends": "./.nuxt/tsconfig.json", "compilerOptions": { "types": ["element-plus/global"] } } </code></pre> <p>6.10.5、 nuxt.config.ts</p> <pre><code>import AutoImport from 'unplugin-auto-import/vite' import Components from "unplugin-vue-components/vite"; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import IconsResolver from "unplugin-icons/resolver"; const lifecycle = process.env.npm_lifecycle_event; export default defineNuxtConfig({ vite: { plugins: [ AutoImport({ resolvers: [ ElementPlusResolver( ), IconsResolver()] }), Components({ dts: true, resolvers: [ElementPlusResolver( { importStyle: false } )] }), ], }, components: true, css: ["~/assets/scss/index.scss"], transpile: ["element-plus"], build: { transpile: lifecycle === "build" ? ["element-plus"] : [], }, })</code></pre> <p>6.10.6、plugins/element-plus.ts</p> <pre><code>import { ID_INJECTION_KEY } from 'element-plus'; export default defineNuxtPlugin(nuxtApp => { // Doing something with nuxtApp nuxtApp.vueApp.provide(ID_INJECTION_KEY,{ prefix: Math.floor(Math.random() * 10000), current: 0, }) })</code></pre> <p>6.10.7、pages/index.vue</p> <pre><code><el-button> ElButton </el-button></code></pre> <p>6.10.8、成功实现效果</p> <p><a href="http://img.e-com-net.com/image/info8/006116398b6543fdac44a3d56ee7c78e.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第28张图片" height="158" src="http://img.e-com-net.com/image/info8/006116398b6543fdac44a3d56ee7c78e.jpg" width="470" style="border:1px solid black;"></a></p> <p><strong>6.11、</strong>获取数据 | Nuxt 3 - 中文文档</p> <p>请求数据的方法有:useAsyncData、useLazyAsyncData (useAsyncData+lazy:true)、useFetch、useLazyFetch (useFetch+lazy:true)</p> <p><strong>pages/req.vue</strong></p> <pre><code><template> <div class="container"> <h1>snow</h1> </div> </template> <script setup lang="ts"> const token = useCookie("token"); const useFetchData = await useFetch('https://md.abc.com.cn/m-staff-center/api/v1/role/pageList',{ method: "get", headers: { 'Authorization' : `Bearer ${token.value}` } }) console.log('17useFetchData', useFetchData.data._rawValue) const useAsyncDataData = await useAsyncData('getRoleList', () => $fetch('https://md.abc.com.cn/m-staff-center/api/v1/role/pageList', { method: "get", headers: { 'Authorization' : `Bearer ${token.value}` } })) console.log('24useAsyncDataData', useAsyncDataData.data._rawValue) </script></code></pre> <p>数据获取成功:</p> <p><a href="http://img.e-com-net.com/image/info8/d36692af3b90490c9178ac65489c54cb.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第29张图片" height="320" src="http://img.e-com-net.com/image/info8/d36692af3b90490c9178ac65489c54cb.jpg" width="650" style="border:1px solid black;"></a></p> <p>注:1,这里使用的全路径接口地址请求的数据,没有因为是本地开发出现跨域问题,同时没有配置代理。2、多次尝试配置代理,使用方法包括vite、nitro,均没有成功,网上暂时也没有找到明确的解答。3、如果后续有了代理相关的进展会及时更新。4、既然本地使用全路径没有跨域问题,那么我考虑在封装请求时候使用全局环境变量来拼接不同环境的域名+接口地址。</p> <p><strong>6.12、封装请求</strong></p> <p>6.12.1、utils/request.ts</p> <pre><code>import { ElMessage } from 'element-plus' const fetch = (url: string, options?: any): Promise<any> => { const token = useCookie("token"); const headers = { // headers信息 'Authorization' : `Bearer ${token.value}` } const { public: { baseUrl } } = useRuntimeConfig() const reqUrl = baseUrl + url return new Promise((resolve, reject) => { useFetch(reqUrl, { ...options, headers }).then(({ data }: any) => { const value = data.value if (!data._rawValue) { // 这里处理错误回调 reject(value) }else if(data._rawValue.code !== '0'){ ElMessage({ message: data._rawValue.msg, type: 'error', }) } else { console.log('40data', data._rawValue) resolve(ref(data)) } }).catch((err: any) => { reject(err) }) }) } export default new class Http { get(url: string, params?: any): Promise<any> { return fetch(url, { method: 'get', params }) } post(url: string, params?: any): Promise<any> { return fetch(url, { method: 'post', params }) } put(url: string, body?: any): Promise<any> { return fetch(url, { method: 'put', body }) } delete(url: string, body?: any): Promise<any> { return fetch(url, { method: 'delete', body }) } }</code></pre> <p>6.12.2、baseUrl</p> <pre><code>// 参见本文6.13多环境开发 import { loadEnv } from 'vite' runtimeConfig: { // 运行时常量 public: { // 客户端-服务的都能访问 baseUrl: loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME } }, </code></pre> <p>6.12.3、utils/api.ts</p> <pre><code>import Http from '@/utils/request' export const config1 = (params: any) => { return Http.get('/m-staff-center/api/v1/pageList', params) } export const getVideoList = (params: any) => { return Http.post('/m-staff-center/api/v1/getName', params) }</code></pre> <p>6.12.4、使用</p> <pre><code>config1('').then((res: any) => { console.log('27', res) }).catch((err: any)=>{ console.log('29', err) }) getVideoList('').then((res: any) => { console.log('51', res) }).catch((err: any)=>{ console.log('54', err) })</code></pre> <p>经测试,成功。 </p> <p><strong>6.13、多环境开发</strong></p> <p>生产使用的项目通常会有dev、test、uat、pre、prd等环境,我们需要配置多种开发环境满足企业级开发要求。</p> <p>6.13.1、根目录创建env目录,创建环境变量文件</p> <p>文件命名规则 .env.[环境变量名,如dev]</p> <p><a href="http://img.e-com-net.com/image/info8/5fefb2cec1e648ec913983d69ea8be39.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第30张图片" height="218" src="http://img.e-com-net.com/image/info8/5fefb2cec1e648ec913983d69ea8be39.jpg" width="416" style="border:1px solid black;"></a></p> <p> .env.dev文件,其他文件同理</p> <pre><code># 请求接口地址 VITE_REQUEST_BASE_URL = '/m-staff-center/api/v1' VITE_SERVER_NAME = 'https://md.abc.com.cn/' # VITE开头的变量才会被暴露出去</code></pre> <p>6.13.2、package.json</p> <pre><code> "scripts": { "build": "nuxt build", "dev": "nuxt dev --mode dev", "test": "nuxt dev --mode test", "uat": "nuxt dev --mode uat", "pre": "nuxt dev --mode pre", "prd": "nuxt dev --mode prd", "generate": "nuxt generate", "preview": "nuxt preview", "postinstall": "nuxt prepare" },</code></pre> <p>6.13.3、nuxt.config.ts</p> <pre><code>import { loadEnv } from 'vite' console.log('基础服务路径', loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME)</code></pre> <p><a href="http://img.e-com-net.com/image/info8/fc46f3033b114d7d8a56fc5eb17420c0.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第31张图片" height="213" src="http://img.e-com-net.com/image/info8/fc46f3033b114d7d8a56fc5eb17420c0.jpg" width="650" style="border:1px solid black;"></a></p> <p>多环境配置成功,环境变量可以用于本地代理使用,如本地代理使用环境域名,等。 </p> <p><strong>6.14、服务器部署</strong></p> <table border="1" style="width:685px;"> <tbody> <tr> <td>npm run build</td> <td> <p>使用“混合渲染模式”创建一个.output目录。<br> 其中包含所有应用程序、服务器和依赖项,可用于生产。<br> 可通过node、pm2等启动后提供WEB服务。</p> <p>打包成混合渲染程序,常用。</p> </td> <td style="width:194px;">打包生成.output<br><a href="http://img.e-com-net.com/image/info8/e21d245b1c584819a701aef58e2b4196.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第32张图片" height="112" src="http://img.e-com-net.com/image/info8/e21d245b1c584819a701aef58e2b4196.jpg" width="325" style="border:1px solid black;"></a></td> </tr> <tr> <td>npm run generate</td> <td> <p>使用“SPA方式预渲染应用程序”的每个路由(启动server对整个程序代码中涉及的URL进行一次服务端和客户端渲染),将结果存储在纯 HTML 文件中,可以部署在任何静态托管服务上。<br> 该命令触发nuxi build带有prerender:true的参数。</p> <p>打包成SPA客户端渲染程序,常用。</p> </td> <td style="width:194px;">打包生成dist<br><a href="http://img.e-com-net.com/image/info8/ee2e6c9b6ae84017835df4bf08ebc8d7.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第33张图片" height="197" src="http://img.e-com-net.com/image/info8/ee2e6c9b6ae84017835df4bf08ebc8d7.jpg" width="326" style="border:1px solid black;"></a></td> </tr> </tbody> </table> <p><strong>build:</strong>混合渲染模式,node启动项目(或者使用pm2),nginx做代理转发。</p> <p>node</p> <blockquote> <p>node ./.output/server/index.mjs</p> </blockquote> <p>pm2</p> <blockquote> <p>pm2 start ecosystem.config.js</p> </blockquote> <pre><code>// 使用pm2,根目录创建ecosystem.config.js module.exports = { apps: [ { name: 'NuxtAppName', exec_mode: 'cluster', instances: 'max', script: './.output/server/index.mjs', } ] }</code></pre> <p> 未测试。</p> <pre><code>// nginx配置 { listen 80; server_name www.abc.com; // 域名 location / { proxy_pass http://127.0.0.1:3000; // 转发到当前服务器3000端口 } }</code></pre> <p>已测试,成功。</p> <p><strong>generate:</strong>预渲染模式,生成静态资源,nginx直接启服务。</p> <p>已测试,成功。</p> <p><strong>6.15、其他内容</strong></p> <p>待补充</p> <p><strong>七、过程记录</strong></p> <p>7.1、init项目不成功</p> <p><a href="http://img.e-com-net.com/image/info8/1a0de91efb244160b246344934531b2d.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第34张图片" height="196" src="http://img.e-com-net.com/image/info8/1a0de91efb244160b246344934531b2d.jpg" width="650" style="border:1px solid black;"></a>解1:墙内的同学可能创建不成功,这里推荐一个链接:https://github.com/nuxt/starter</p> <p>解2:开始使用科学上网的方法也没有下载成功,后来使用了付费科学上网的方法下载成功。下载成功后如图。</p> <p><a href="http://img.e-com-net.com/image/info8/58002c812c5c495a8eb8d5673458dca5.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第35张图片" height="110" src="http://img.e-com-net.com/image/info8/58002c812c5c495a8eb8d5673458dca5.jpg" width="650" style="border:1px solid black;"></a></p> <p>7.2、useHead接收参数如下:</p> <pre><code>useHead(meta: Computable<MetaObject>): void interface MetaObject extends Record<string, any> { charset?: string viewport?: string meta?: Array<Record<string, any>> link?: Array<Record<string, any>> style?: Array<Record<string, any>> script?: Array<Record<string, any>> noscript?: Array<Record<string, any>> titleTemplate?: string | ((title: string) => string) title?: string bodyAttrs?: Record<string, any> htmlAttrs?: Record<string, any> }</code></pre> <pre><code>charset: 指定 HTML 的字元编码,预设为 utf-8。 viewport: 设定网页的可见区域,预设为 width=device-width, initial-scale=1。 meta: 接受一个阵列,阵列中的每个元素,都將会建立一个 <meta> 标记,元素中物件的属性将对应至的属性。 link: 接受一个阵列,阵列中的每个元素,都将会建立一个 <link> 标记,元素中物件的属性将对应至的属性。 style: 接受一个阵列,阵列中的每個元素,都将会建立一个 <style> 标记,元素中物件的属性将对应至的属性。 script: 接受一个阵列,阵列中的每個元素,都将会建立一个 <script> 标记,元素中物件的属性将对应至的属性。 noscript: 接受一个阵列,阵列中的每個元素,都将会建立一个 <noscript> 标记,元素中物件的属性将对应至的属性。 titleTemplage: 接受一個字串或函數,用來动态的设定该页面元件的网页标题。 title: 在页面元件设置静态的网页标题。 bodyAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。 htmlAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。</code></pre> <p>理解useHead:相当于设置页面<head>标签内相关内容。</p> <p>7.3、出现类似包不能解析的问题</p> <p><a href="http://img.e-com-net.com/image/info8/ea6fdc78075b45359565951f3c4d2f12.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第36张图片" height="250" src="http://img.e-com-net.com/image/info8/ea6fdc78075b45359565951f3c4d2f12.jpg" width="650" style="border:1px solid black;"></a></p> <p>解决:</p> <p>根目录创建 .npmrc 文件</p> <pre><code>shamefully-hoist = true</code></pre> <p>删除node_modules,再次执行pnpm install ,解决成功 </p> <p>有些包仅在根目录的node_modules时才有效,可以通过此配置,提升那些不在node_modules根目录的包。</p> <p>或者执行:</p> <pre><code>pnpm i --shamefully-hoist</code></pre> <p>两种方法均测试成功。</p> <p><strong>7.4、publicPath (nuxt2.X)  等同于  baseURL (nuxt3.0)</strong></p> <p>Nuxt Configuration Reference · Nuxt</p> <p>7.4.1、nuxt2.x,nuxt.config.js</p> <pre><code>build: { publicPath: process.env.PUBLIC_PATH, }</code></pre> <p>7.4.2、nuxt3,nuxt.config.ts</p> <pre><code>app: { baseURL: '/m-abc-pc', }</code></pre> <p><a href="http://img.e-com-net.com/image/info8/51ef513d25e14d9e8947bc0adef52fc4.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第37张图片" height="490" src="http://img.e-com-net.com/image/info8/51ef513d25e14d9e8947bc0adef52fc4.jpg" width="650" style="border:1px solid black;"></a></p> <p>7.4.3、使用场景</p> <p>使用这一项配置的时候请求资源的地址就会有这个目录,如下图,在服务区部署时候很重要。</p> <p><a href="http://img.e-com-net.com/image/info8/52f476917f9a4290b92a686e2c1615bc.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第38张图片" height="106" src="http://img.e-com-net.com/image/info8/52f476917f9a4290b92a686e2c1615bc.jpg" width="636" style="border:1px solid black;"></a></p> <p>7.5、开发环境修改端口</p> <p><a href="http://img.e-com-net.com/image/info8/39b235010b74493094eb436d41f1b6f4.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第39张图片" height="248" src="http://img.e-com-net.com/image/info8/39b235010b74493094eb436d41f1b6f4.jpg" width="650" style="border:1px solid black;"></a></p> <p><a href="http://img.e-com-net.com/image/info8/765da92a68f5448597f8dd16d5a8fe6f.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第40张图片" height="148" src="http://img.e-com-net.com/image/info8/765da92a68f5448597f8dd16d5a8fe6f.jpg" width="524" style="border:1px solid black;"></a></p> <p><strong>7.6、设置网站 favicon</strong></p> <p>7.6.1、favicon.ico 文件放在public目录下。</p> <p><a href="http://img.e-com-net.com/image/info8/e9ddf863c4a14053a3d5998e7f68b258.jpg" target="_blank"><img alt="" height="95" src="http://img.e-com-net.com/image/info8/e9ddf863c4a14053a3d5998e7f68b258.jpg" width="389"></a></p> <p>7.6.2、nuxt.config.ts  app/head/link下增加相应内容</p> <pre><code>link: [ { rel: "icon", href: "/favicon.ico", type: 'image/x-icon'}, ],</code></pre> <p><a href="http://img.e-com-net.com/image/info8/66b4484bd602409881edcab0df40a645.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第41张图片" height="257" src="http://img.e-com-net.com/image/info8/66b4484bd602409881edcab0df40a645.jpg" width="650" style="border:1px solid black;"></a></p> <p>经过测试,成功。</p> <p><strong>八、欢迎交流指正,关注我,一起学习。</strong></p> <p><strong>参考链接:</strong></p> <p>Configuration | ⚗️ Nitro</p> <p>[Day 24] Nuxt 3 搜尋引擎最佳化 (SEO) 與 HTML Meta Tag - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天</p> <p>Nuxt3-动态更改meta信息(关键词、标题、描述)_fat_shady的博客-CSDN博客</p> <p>令人愉快的 Nuxt3 教程 (一): 应用的创建与配置 - 知乎</p> <p>技术胖-Nuxt3从零到实战手把手 免费视频图文教程</p> <p>Nuxt.js 3.0 正式发布! - 知乎</p> <p></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1645415616967925760"></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">你可能感兴趣的:(前端,nuxt,前端,nuxt)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1773504513622212608.htm" title="大前端-postcss安装使用指南" target="_blank">大前端-postcss安装使用指南</a> <span class="text-muted">黑夜照亮前行的路</span> <a class="tag" taget="_blank" href="/search/postcss/1.htm">postcss</a> <div>PostCSS是一款强大的CSS处理工具,可以用来自动添加浏览器前缀、代码合并、代码压缩等,提升代码的可读性,并支持使用最新的CSS语法。以下是一份简化的PostCSS安装使用指南:一、安装PostCSS在你的项目目录中,通过npm(NodePackageManager)来安装PostCSS。打开命令行窗口,输入以下命令:bash复制代码npminstallpostcss--save-dev这将把</div> </li> <li><a href="/article/1773504261557125120.htm" title="谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程" target="_blank">谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程</a> <span class="text-muted">pigerr杨</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/drivers/1.htm">drivers</a> <div>ChromeDriver官方网站GitHub||GoogleChromeLabs/chrome-for-testingChromeDriver113-125_JSONChromeforTestingavailability123-125zip白月黑羽Python基础|进阶|Qt图形界面|Django|自动化测试|性能测试|JS语言|JS前端|原理与安装</div> </li> <li><a href="/article/1773501994674225152.htm" title="虚拟 DOM 的优缺点有哪些" target="_blank">虚拟 DOM 的优缺点有哪些</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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>虚拟DOM(VirtualDOM)技术作为现代前端开发中的重要组成部分,已经成为了众多流行前端框架的核心特性。它的引入为前端开发带来了诸多优势,同时也需要我们认真思考其潜在的考量。下面简单的介绍一下虚拟DOM技术的优势与缺点,深入探讨其在实际应用中的影响。提升性能虚拟DOM的最大优势之一是提升页面性能。通过比较前后两次虚拟DOM树的差异,最小化实际DOM操作,从而减少页面重渲染时的性能消耗。这种优</div> </li> <li><a href="/article/1773495574226599936.htm" title="3、JavaWeb-Ajax/Axios-前端工程化-Element" target="_blank">3、JavaWeb-Ajax/Axios-前端工程化-Element</a> <span class="text-muted">所谓远行Misnearch</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>P34Ajax介绍Ajax:AsynchroousJavaScriptAndXML,异步的JS和XMLJS网页动作,XML一种标记语言,存储数据,作用:数据交换:通过Ajax给服务器发送请求,并获取服务器响应的数据异步交互:在不重新加载整个页面的情况下,与服务器交换数据并实现更新部分网页的技术,例如:搜索联想、用户名是否可用的校验等等。同步与异步:同步:服务器在处理中客户端要处于等待状态,输入域名</div> </li> <li><a href="/article/1773382031552610304.htm" title="java实体中返回前端的double类型四舍五入(格式化)" target="_blank">java实体中返回前端的double类型四舍五入(格式化)</a> <span class="text-muted">婲落ヽ紅顏誶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>根据业务,需要通过后端给前端返回部分double类型的数值,一般需要保留两位小数,使用jackson转换对象packagecom.ruoyi.common.core.config;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.f</div> </li> <li><a href="/article/1773360885226602496.htm" title="Django forms组件" target="_blank">Django forms组件</a> <span class="text-muted">在飞行-米龙</span> <a class="tag" taget="_blank" href="/search/Django/1.htm">Django</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>【一】引入【1】实现登陆验证功能(1)需求分析登陆验证需要前后端交互,采用form表单提交数据对数据进行校验用户名必须以英文大写字母开头密码必须大于三位数反馈给用户错误的信息除了反馈错误的信息还有保留原始输入内容(2)后端代码使用user_info_dict字典每次刷新存储存储前端发送的信息存储后端进行验证的信息defhome(request):#每次后刷新这个信息字典user_info_dict</div> </li> <li><a href="/article/1773308900838277120.htm" title="Web前端Html的表单" target="_blank">Web前端Html的表单</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/html/1.htm">html</a> <div>表单的关键字:form标签表示一个表单区域action=“后端地址”method=“提交数据方式:get/post”input单行输入框type=“text”文本name=“定义名称名字自定义”向后端提交的键readonly=“readonly”只读,不可修改,但是可以提交disabled=“disabled”禁用组件不可修改,不能提交type=“password”密码框type=“radio”单</div> </li> <li><a href="/article/1773279695408791552.htm" title="Thinkphp - 详细实现网站系统登录功能,附带 Mysql 数据库设置、Web 前端展示界面、信息校验等(详细代码,即设计过程)" target="_blank">Thinkphp - 详细实现网站系统登录功能,附带 Mysql 数据库设置、Web 前端展示界面、信息校验等(详细代码,即设计过程)</a> <span class="text-muted">王佳斌</span> <a class="tag" taget="_blank" href="/search/%2B/1.htm">+</a><a class="tag" taget="_blank" href="/search/Thinkphp/1.htm">Thinkphp</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>前言登录功能,是我们几乎开发每个系统都必须的模块。登录功能设计思路,主要包括几个方面。用户输入网址展示登录页面用户输入用户名,密码等点击登录进行信息校验校验通过之后,记录用户登录信息,跳转指定页面用户校验失败,提示失败信息页面目录具体功能实现为了快速搭建可用、美观的页面,我们采用一个比较成熟的前端框架Bootstrap。下面我们到Bootstrap的官网Bootsrap官网下载bootstrap。</div> </li> <li><a href="/article/1772795036136701952.htm" title="程序员开发技术整理" target="_blank">程序员开发技术整理</a> <span class="text-muted">laizhixue</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</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-前端框架element-前端框架bootstrap-前端框架echarts-图标组件C#后端技术:webservice:soap架构:简单的通信协议,用于服务通信ORM框架:对象关系映射,如EF:对象实体模型,是ado.net中的应用技术soap服务通讯:xml通讯ado.net:OAuth2:登录授权认证:Token认证:JWT:jsonwebtokenJava后端技术:便捷工</div> </li> <li><a href="/article/1772773132000624640.htm" title="【前端学习——js篇】7.函数缓存" target="_blank">【前端学习——js篇】7.函数缓存</a> <span class="text-muted">笔下无竹墨下有鱼</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/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>具体见:https://github.com/febobo/web-interview7.函数缓存函数缓存,就是将函数运算过的结果进行缓存本质上就是用空间(缓存存储)换时间(计算过程)常用于缓存数据计算结果和缓存对象。其实现主要通过闭包、柯里化和高阶函数。下面主要介绍下柯里化:①柯里化柯里化(currying)是一种函数式编程的概念,指的是将一个带有多个参数的函数转换成一系列只接受一个参数的函数的</div> </li> <li><a href="/article/1772673815097180160.htm" title="Websocket服务监听收发消息" target="_blank">Websocket服务监听收发消息</a> <span class="text-muted">beiback</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%97%AE%E9%A2%98/1.htm">服务器问题</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>目录1.pom依赖坐标2.项目配置端口和项目包名2.创建处理器3.注册处理器4.前端页面1.pom依赖坐标org.springframework.bootspring-boot-starter-websocket2.项目配置端口和项目包名application.propertiesserver.port=8088//路径规范:为应用的所有servlet提供一个统一的前缀,使URL结构更加清晰和一致</div> </li> <li><a href="/article/1772673816238030848.htm" title="Netty服务器结合WebSocke协议监听和接收数据" target="_blank">Netty服务器结合WebSocke协议监听和接收数据</a> <span class="text-muted">beiback</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%97%AE%E9%A2%98/1.htm">服务器问题</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>目录1.pom依赖2.配置属性3.创建netty服务器4.建立监听和响应5.创建启动器6.前端static下页面7.前端js8.注意异常问题9.创建netty服务器--使用守护线程1.pom依赖io.nettynetty-all4.1.86.Final2.配置属性application.properties#启动端口server.port=8088server.servlet.context-pa</div> </li> <li><a href="/article/1772654174425645056.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前端页面功能:首页、培训班、在线学习、企业文化、交流论坛、试卷列表、系统公告、留言反馈、个</div> </li> <li><a href="/article/1772631263593693184.htm" title="javascript实现SM2加密解密" target="_blank">javascript实现SM2加密解密</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%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>前提JavaWeb环境前端代码window.sm2=function(t){functioni(e){if(r[e])returnr[e].exports;varn=r[e]={i:e,l:!1,exports:{}};returnt[e].call(n.exports,n,n.exports,i),n.l=!0,n.exports}varr={};returni.m=t,i.c=r,i.d=fu</div> </li> <li><a href="/article/1772541266194661376.htm" title="前端埋点解决方案" target="_blank">前端埋点解决方案</a> <span class="text-muted">zhu_zhu_xia</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>一、前言:基于神策数据的前端埋点解决方案JavaScript快速使用·神策分析使用手册[预览版]二、sdkgitlab下载地址https://github.com/sensorsdata/sa-sdk-javascript/releases或者npm安装npmisa-sdk-javascript三、入门3.1接入sdk以及配置(version1.17.2),入口文件接入sdk以及添加配置(func</div> </li> <li><a href="/article/1772464985230868480.htm" title="blog-engine-06-pelican 静态网站生成 支持 markdown 和 reST 语法" target="_blank">blog-engine-06-pelican 静态网站生成 支持 markdown 和 reST 语法</a> <span class="text-muted">老马啸西风</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>拓展阅读blog-engine-01-常见博客引擎jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman对比blog-engine-02-通过博客引擎jekyll构建githubpages博客实战笔记blog-engine-02-博客引擎jekyll-jekyll博客引擎介绍blog-engine-02-博客引擎jekyll-jekyl</div> </li> <li><a href="/article/1772399131164213248.htm" title="如何提出令人爱回答的好问题?" target="_blank">如何提出令人爱回答的好问题?</a> <span class="text-muted">兮若耶</span> <div>我们经常会遇到这样的问题,如我适合做什么?这个名词怎么解释?大部分人面对这样的问题时,要么答非所问,要么无从下手。现在的很多事物都是速成的,只是好的问题并没有那么容易被提出来。而提不好的问题,可能会拿不到想要的信息等等。所以提出一个好问题很重要。01提问的功能我们参加各种聚会、会议时,能听到很多的比喻和新观点,而这些是在书上和网上找不到的。这些新的有用的东西,都在前端被实践着,暂时来不及把知识系统</div> </li> <li><a href="/article/1772378002940821504.htm" title="谈谈对前端性能监控的理解和实践" target="_blank">谈谈对前端性能监控的理解和实践</a> <span class="text-muted">Layla_c</span> <a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</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> <div>一、谈谈对前端性能监控的理解和实践前端性能监控是确保网页或应用高效、稳定运行的关键环节,它涉及对前端页面加载速度、资源消耗、错误率等指标的实时监控和预警。通过前端性能监控,开发者和运维团队能够及时发现并解决性能瓶颈,从而提升用户体验和系统稳定性。理解前端性能监控,首先要明确其重要性。在移动互联网时代,用户对网页和应用的响应速度有着极高的要求。如果页面加载缓慢或出现卡顿,用户可能会选择离开,这对企业</div> </li> <li><a href="/article/1772365540988354560.htm" title="mineadmin使用docker启动方式" target="_blank">mineadmin使用docker启动方式</a> <span class="text-muted">qq_38812523</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>找个目录,git下来mineadmin代码,在根目录,创建文件名docker-compose.yml然后复制下面代码version:'3'services:#首先下载前端,https://gitee.com/mineadmin/mineadmin-vue#在后端根目录建立mine-ui目录,把前端文件复制过来。#容器内访问宿主机的地址用:host.docker.internal#宿主机也可以在ho</div> </li> <li><a href="/article/1772335078576291840.htm" title="为什么需要使用版本控制工具(如Git)?它如何帮助管理前端开发项目?" target="_blank">为什么需要使用版本控制工具(如Git)?它如何帮助管理前端开发项目?</a> <span class="text-muted">智伴科技</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>版本控制工具(如Git)在前端开发项目中扮演着重要的角色,主要有以下几方面的作用:1.**版本管理**:版本控制工具可以帮助开发团队管理项目的不同版本,记录每次代码变动的历史记录,方便追踪和回溯。开发人员可以通过版本控制工具轻松地查看、对比和恢复以前的版本。2.**协同合作**:多人开发同一个项目时,版本控制工具可以协助团队成员协同工作,避免代码冲突、重复工作和混乱。开发人员可以通过版本控制工具共</div> </li> <li><a href="/article/1772307893329133568.htm" title="低代码与前端开发架构:重塑软件开发的未来" target="_blank">低代码与前端开发架构:重塑软件开发的未来</a> <span class="text-muted">快乐非自愿</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>随着技术的不断进步和数字化转型的深入,软件开发领域正经历着一场革命性的变革。在这场变革中,低代码开发平台和前端开发架构扮演着越来越重要的角色。本文将探讨低代码与前端开发架构之间的关系,并分析它们如何共同推动软件开发的创新与发展。低代码开发平台的崛起低代码开发平台(Low-CodeDevelopmentPlatform,LCDP)是一种新型的软件开发方式,它允许开发者通过图形化界面、预构建的模块和模</div> </li> <li><a href="/article/1772083971480420352.htm" title="接口测试之测试原则、测试用例、测试流程......" target="_blank">接口测试之测试原则、测试用例、测试流程......</a> <span class="text-muted">程序员老鹰</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E8%A6%86%E7%9B%96%E7%8E%87/1.htm">测试覆盖率</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%AE%89%E5%85%A8/1.htm">系统安全</a> <div>一、接口的介绍软件测试中,常说的接口有两种:图形用户接口(GUI,人与程序的接口)、应用程序编程接口(API)。接口(API)是系统与系统之间,模块与模块之间或者服务与服务之间相互调用的入口。它的本质:其实就是一种约定,在开发前期,我们约定接口会接收什么数据;在处理完成后,它又会返回什么数据。开发岗位分为前端和后端,他们相互配合完成工作,会协商接口的定义方法。一般后端定义接口,前端调用接口。前后端</div> </li> <li><a href="/article/1772015996245180416.htm" title="【前端】CommonJS和ES Module" target="_blank">【前端】CommonJS和ES Module</a> <span class="text-muted">Lucky小维</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>区别语法差异:CommonJS:使用require()导入模块,使用module.exports或exports导出模块。ESModule:使用import导入模块,使用export导出模块。编译时vs运行时:CommonJS是在运行时加载模块,模块代码是动态执行的。ESModule是在编译时静态解析模块依赖关系,以便更好地进行优化和静态分析。异步加载:CommonJS不支持异步加载模块,只能同步</div> </li> <li><a href="/article/1771980751349284864.htm" title="基于python+vue高校毕业生离校管理系统flask-django-php-nodejs" target="_blank">基于python+vue高校毕业生离校管理系统flask-django-php-nodejs</a> <span class="text-muted">QQ511008285</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>课题主要采用Uni-weixin、django架构技术,前端以小程序页面呈现给用户,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。微信小程序主要包括学生、教务人员、宿管员、图书管理员、财务人员、离校申请、物流信息、钥匙归还、图片归还、欠费信息、催缴信息等功能,从而实现智能化的管理方式,提高工作效率。关键字:高校毕业生离校管理系统;django框架;MySQL数据库语言:</div> </li> <li><a href="/article/1771974961003560960.htm" title="Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题" target="_blank">Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题</a> <span class="text-muted">百思不得小李</span> <a class="tag" taget="_blank" href="/search/JS%E5%AE%9E%E6%88%98%E8%AE%B0%E5%BD%95/1.htm">JS实战记录</a><a class="tag" taget="_blank" href="/search/vue2%E5%AE%9E%E6%88%98%E8%AE%B0%E5%BD%95/1.htm">vue2实战记录</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><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>1.process.env是Node.js中的一个环境1.打开命令行查看环境:2.process.env与VueCLI项目VueCli有以下三种运行模式development模式用于vue-cli-serviceservetest模式用于vue-cli-servicetest:unitproduction模式用于vue-cli-servicebuild和vue-cli-servicetest:e2</div> </li> <li><a href="/article/1771963631177629696.htm" title="浅谈前端路由history和hash的理解" target="_blank">浅谈前端路由history和hash的理解</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/%E5%93%88%E5%B8%8C%E7%AE%97%E6%B3%95/1.htm">哈希算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>hash和history在前端面试中是很常考的一道题目,可能很多人对于history和hash的理解差异性就是,他们两者的url字段一个没有#号一个有#号,但是有没有想过为什么这样呢,有无#号又有什么差异呢,这篇文章谈一谈我对前端路由history和hash的理解。hash和history都可以用于前后端分离项目,且两者有各自的特点和各自的使用场景。一、前端路由原理1、SPASPA,即单页面应用(</div> </li> <li><a href="/article/1771940344397627392.htm" title="linux 3 个 profile 配置文件区别? /etc/profile + .bashrc + .bash_profile" target="_blank">linux 3 个 profile 配置文件区别? /etc/profile + .bashrc + .bash_profile</a> <span class="text-muted">老马啸西风</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>linux命令汇总命令描述地址linuxtop实时查看系统性能linuxtop-linux内存linuxtargz解压命令linuxtargz解压命令linuxtail显示文件末尾内容linuxtail,linuxheadlinuxrm删除文件或目录linuxrm,mkdirlinuxpwd显示当前目录linuxpwdlinuxps显示当前进程信息linuxpslinuxport显示端口占用情况l</div> </li> <li><a href="/article/1771630580518158336.htm" title="Yarn 管理的前端项目转换为使用 npm" target="_blank">Yarn 管理的前端项目转换为使用 npm</a> <span class="text-muted">577wq</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.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/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>如果你想将一个使用Yarn管理的前端项目转换为使用npm,你需要执行一些步骤来确保成功迁移。以下是一种可能的方法:步骤:备份项目:在执行任何更改之前,确保你对项目进行了备份。这样可以防止意外的数据丢失。删除yarn.lock文件:在项目根目录中,删除yarn.lock文件。这个文件记录了使用Yarn安装的确切的依赖版本信息。修改package.json文件:打开项目的package.json文件,</div> </li> <li><a href="/article/1771628691311362048.htm" title="accessToken" target="_blank">accessToken</a> <span class="text-muted">星梦清河</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/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>1、介绍accessToken,通常是用于身份验证和授权的令牌,它可以用于前端和后端,具体使用方式取决于应用程序的架构和需求。前端应用accessToken通常用于向后端API发送请求时进行身份验证和授权。(1)前端应用程序会在用户登录成功后获取accessToken;(2)并将accessToken存储在本地;(3)然后在每次请求API时,将accessToken作为请求头或参数发送给后端;(4</div> </li> <li><a href="/article/1771565373594861568.htm" title="python社区垃圾分类管理平台的设计与实现flask-django-php-nodejs" target="_blank">python社区垃圾分类管理平台的设计与实现flask-django-php-nodejs</a> <span class="text-muted">QQ_511008285</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,社区垃圾分类管理平台利用计算机网络实现信息化管理,使整个社区垃圾分类管理的发展和服务水平有显著提升。语言:Python框架:django/flask软件版本:python3.7.7数据库:mysql数据库工具:Navicat前端框架:vue.js通过比较两个不同因素的框架,可以看出Flask和Django不</div> </li> <li><a href="/article/71.htm" title="Linux的Initrd机制" target="_blank">Linux的Initrd机制</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin</div> </li> <li><a href="/article/198.htm" title="maven本地仓库路径修改" target="_blank">maven本地仓库路径修改</a> <span class="text-muted">bitcarter</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>默认maven本地仓库路径:C:\Users\Administrator\.m2 修改maven本地仓库路径方法:     1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml     2.找到        </div> </li> <li><a href="/article/325.htm" title="XSD和XML中的命名空间" target="_blank">XSD和XML中的命名空间</a> <span class="text-muted">darrenzhu</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4/1.htm">命名空间</a> <div>http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml http://blog.csdn.net/wanghuan203/article/details/9203621 http://blog.csdn.net/wanghuan203/article/details/9204337 http://www.cn</div> </li> <li><a href="/article/452.htm" title="Java 求素数运算" target="_blank">Java 求素数运算</a> <span class="text-muted">周凡杨</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%B4%A0%E6%95%B0/1.htm">素数</a> <div>网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。 第一种:   原理: 6N(+-)1法         任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)   </div> </li> <li><a href="/article/579.htm" title="java 单例模式" target="_blank">java 单例模式</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>想必单例模式大家都不会陌生,有如下两种方式来实现单例模式:   class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} static Singleton getInstance() { return instance; }</div> </li> <li><a href="/article/706.htm" title="Linux下Mysql源码安装" target="_blank">Linux下Mysql源码安装</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz (1)创建mysql的安装目录及数据库存放目录       解压缩下载的源码包,目录结构,特殊指定的目录除外:           </div> </li> <li><a href="/article/833.htm" title="32位和64位操作系统" target="_blank">32位和64位操作系统</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/32%E4%BD%8D%E5%92%8C64%E4%BD%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">32位和64位操作系统</a> <div>32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了</div> </li> <li><a href="/article/960.htm" title="我的spring学习笔记10-轻量级_Spring框架" target="_blank">我的spring学习笔记10-轻量级_Spring框架</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a> <div>一、问题提问:     → 请简单介绍一下什么是轻量级?     轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。  </div> </li> <li><a href="/article/1087.htm" title="mongodb 环境搭建及简单CURD" target="_blank">mongodb 环境搭建及简单CURD</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/curd/1.htm">curd</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a> <div>一 搭建mongodb环境 1. 在mongo官网下载mongodb 2. 在本地创建目录 "D:\Program Files\mongodb-win32-i386-2.6.4\data\db" 3. 运行mongodb服务 [mongod.exe --dbpath "D:\Program Files\mongodb-win32-i386-2.6.4\data\</div> </li> <li><a href="/article/1214.htm" title="数据字典和动态视图" target="_blank">数据字典和动态视图</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8/1.htm">数据字典</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%86%E5%9B%BE/1.htm">动态视图</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%92%8C%E5%AF%B9%E8%B1%A1%E6%9D%83%E9%99%90/1.htm">系统和对象权限</a> <div>数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭   数据字典中包含   数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) 数据库为一</div> </li> <li><a href="/article/1341.htm" title="多线程编程一般规则" target="_blank">多线程编程一般规则</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>       如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。        不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。 </div> </li> <li><a href="/article/1468.htm" title="将文件或目录拷贝到另一个Linux系统的命令scp" target="_blank">将文件或目录拷贝到另一个Linux系统的命令scp</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/scp/1.htm">scp</a> <div>一.功能说明        scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下:        scp 远程用户名@IP地址:文件的绝对路径</div> </li> <li><a href="/article/1595.htm" title="【持久化框架MyBatis3五】MyBatis3一对多关联查询" target="_blank">【持久化框架MyBatis3五】MyBatis3一对多关联查询</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a> <div>以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。   示例数据:   地址表:   CREATE TABLE ADDRESSES ( ADDR_ID INT(11) NOT NULL AUTO_INCREMENT, STREET VAR</div> </li> <li><a href="/article/1722.htm" title="cookie状态判断引发的查找问题" target="_blank">cookie状态判断引发的查找问题</a> <span class="text-muted">bitcarter</span> <a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/cgi/1.htm">cgi</a> <div>先说一下我们的业务背景: 1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩 2.form中action是一个cgi服务 3.后台cgi服务同时供PC,H5,APP 4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题) 问题:(折腾两天。。。。) 1.PC端cgi服务正常调用,cookie判断没</div> </li> <li><a href="/article/1849.htm" title="通过Nginx,Tomcat访问日志(access log)记录请求耗时" target="_blank">通过Nginx,Tomcat访问日志(access log)记录请求耗时</a> <span class="text-muted">ronin47</span> <div>一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_r</div> </li> <li><a href="/article/1976.htm" title="java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。" target="_blank">java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class ProbabilityOfDice { /** * Q67 n个骰子的点数 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 * 在以下求解过程中,我们把骰子看作是有序的。 * 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况 */ private stati</div> </li> <li><a href="/article/2103.htm" title="看别人的博客,觉得心情很好" target="_blank">看别人的博客,觉得心情很好</a> <span class="text-muted">Cb123456</span> <a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2/1.htm">博客</a><a class="tag" taget="_blank" href="/search/%E5%BF%83%E6%83%85/1.htm">心情</a> <div>   以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客:    职业规划:    http://www.iteye.com/blogs/subjects/zhiyeguihua      android学习:    1.http://byandby.i</div> </li> <li><a href="/article/2230.htm" title="[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析" target="_blank">[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a> <div>     我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误      在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到</div> </li> <li><a href="/article/2357.htm" title="JS常用的事件及方法" target="_blank">JS常用的事件及方法</a> <span class="text-muted">cwqcwqmax9</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>事件 描述 onactivate 当对象设置为活动元素时触发。 onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 onbeforeactivate 对象要被设置为当前元素前立即触发。 onbeforecut 当选中区从文档中删除之前在源对象触发。 onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即</div> </li> <li><a href="/article/2484.htm" title="正则表达式验证日期格式" target="_blank">正则表达式验证日期格式</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/IT%E5%85%B6%E5%AE%83/1.htm">IT其它</a><a class="tag" taget="_blank" href="/search/java%E5%85%B6%E5%AE%83/1.htm">java其它</a> <div> 正则表达式验证日期格式 function isDate(d){ var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i); if(!v) { this.focus(); return false; } } <input value="2000-8-8" onblu</div> </li> <li><a href="/article/2611.htm" title="Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证" target="_blank">Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>public array rules () {return} array 要调用 validate() 时应用的有效性规则。 返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=>'scenario name', ...validation </div> </li> <li><a href="/article/2738.htm" title="UITextAttributeTextColor = deprecated in iOS 7.0" target="_blank">UITextAttributeTextColor = deprecated in iOS 7.0</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a> <div>In this lesson we used the key "UITextAttributeTextColor" to change the color of the UINavigationBar appearance to white. This prompts a warning "first deprecated in iOS 7.0." Ins</div> </li> <li><a href="/article/2865.htm" title="判断一个数是质数的几种方法" target="_blank">判断一个数是质数的几种方法</a> <span class="text-muted">EmmaZhao</span> <a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。 判断一个数是质数的最简单的方法如下: def isPrime1(n): for i in range(2, n): if n % i == 0: return False return True 但是在上面的方法中有一些冗余的计算,所以</div> </li> <li><a href="/article/2992.htm" title="SpringSecurity工作原理小解读" target="_blank">SpringSecurity工作原理小解读</a> <span class="text-muted">坏我一锅粥</span> <a class="tag" taget="_blank" href="/search/SpringSecurity/1.htm">SpringSecurity</a> <div>   SecurityContextPersistenceFilter   ConcurrentSessionFilter   WebAsyncManagerIntegrationFilter   HeaderWriterFilter   CsrfFilter   LogoutFilter   Use</div> </li> <li><a href="/article/3119.htm" title="JS实现自适应宽度的Tag切换" target="_blank">JS实现自适应宽度的Tag切换</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</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/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>效果体验:http://hovertree.com/texiao/js/3.htm   该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。 HTML文件代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"</div> </li> <li><a href="/article/3246.htm" title="Hbase Rest API : 数据查询" target="_blank">Hbase Rest API : 数据查询</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a> <div>hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。   启动命令:./bin/hbase rest s</div> </li> <li><a href="/article/3373.htm" title="JQuery实现鼠标拖动元素移动位置(源码+注释)" target="_blank">JQuery实现鼠标拖动元素移动位置(源码+注释)</a> <span class="text-muted">明子健</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E6%8B%96%E5%8A%A8/1.htm">拖动</a><a class="tag" taget="_blank" href="/search/%E9%BC%A0%E6%A0%87/1.htm">鼠标</a> <div>欢迎讨论指正!   print.html代码: <!DOCTYPE html> <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>发票打印</title> &l</div> </li> <li><a href="/article/3500.htm" title="Postgresql 连表更新字段语法 update" target="_blank">Postgresql 连表更新字段语法 update</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/PostgreSQL/1.htm">PostgreSQL</a> <div>下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: UPDATE tops_visa.visa_order SET op_audit_abort_pass_date = now() FROM tops_visa.visa_order as t1 INNER JOIN tops_visa.visa_visitor as t2 ON t1. </div> </li> <li><a href="/article/3627.htm" title="将redis,memcache结合使用的方案?" target="_blank">将redis,memcache结合使用的方案?</a> <span class="text-muted">tcrct</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a> <div>公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi</div> </li> <li><a href="/article/3754.htm" title="开发中遇到的诡异的bug" target="_blank">开发中遇到的诡异的bug</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a> <div>今天我们服务器组遇到个问题: 我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key</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>