The documentation is a work in progress, and English edition is just an empty shell for now. I will translate it when Chinese edition has done.
v-no 使用 Vue CLI 进行开发,编译它并不需要掌握 Vue.js 的相关知识。
如果你想用 v-no 搭建自己的网站,可以考虑使用随版本号更新的网站模板。更新网站内容和绝大部分的可配置项都不需要你进行编译,只有当模板使用的环境变量不能满足你的部署需求时(部署到根域名下某个目录,或者需要更多语言的语法高亮支持),你才有必要阅读以下内容。
编译步骤
最通常不过的 Node.js 项目编译:
目录结构
编译完成的文件会输出在 dist
目录下。这是默认的目录结构:
高亮的行指示的是路径固定的重要文件。
其中 index.html
、assets/css/*
和 assets/js/*
是编译后的代码文件。
assets/config.js
包含应用的一些可配置项。它默认指定了 favicon.png
和 六个 .md
文件的路径。uploads/logo.png
则是作为示例被 index.md
引用。
现代模式
现代模式是 Vue CLI 提供的一种构建选择。
v-no 在这个模式下编译的 .js
文件体积能减少 16% ~ 18% 左右,执行性能也会相应提高。不过你也有必要同时提供一份为老旧浏览器准备的传统代码,以防遇到还用着祖传软件的访客们。v-no 的部署大小会因此变成原来的两倍,浏览器会选择其中一种版本的代码进行加载。
这是以现代模式进行构建的指令,你需要酌情考虑是否使用它:
这是它输出的 dist
目录结构(省略了和普通构建没有区别的地方):
高亮的行指示的就是传统版本的代码文件。
如果你只想部署现代版本的代码,也可以手动清理掉它们。然后移除 index.html
中包含 nomodule
的相关代码。它们格式化后会是这个样子:
环境变量
v-no 有几个会影响编译结果的环境变量,它们储存在项目根目录下的 .env
文件中。
这是默认的 .env
文件:
变量说明:
VUE_APP_PUBLIC_PATH | 应用的部署路径。如果部署到根域名(http://localhost/ ),它就是 / ;如果部署到根域名下的某个目录(http://localhost/v-no-doc/ ),它是这个目录的路径(/v-no-doc/ )。请避免让此项留空,或使用相对路径,这会让 v-no 产生许多预料之外的问题。 |
VUE_APP_INDEX_PATH | 主页 HTML 文件的输出路径,它是应用的唯一入口。如果要进行预渲染,请避免让它和同名 .md 文件处于同一目录(同名 .md 文件的预渲染页面会把它覆盖掉)。通常建议在需要预渲染时把此项改为 -/index.html 。 |
VUE_APP_CDN_URL | 网站使用的 CDN 地址,需要以 / 结尾。它可以让 v-no 自身代码文件和配置文件也能使用 CDN 链接,以达到全站 CDN 的目的。配置文件的 cdn 配置项会在启用它进行编译后失效。如果此项为空,它会被忽略。 |
PRISM_LANGUAGES | Prism.js 会高亮的语言列表,注意用英文逗号进行分隔。你可以参考 Prism.js 支持的语言填写。如果此项为空,会将 Prism.js 的打包体积压到最小。 |
VUE_APP_PUBLIC_PATH
和 VUE_APP_INDEX_PATH
直接传递给 vue.config.js
,它们对应 Vue CLI 文档里的 publicPath
和 indexPath
。
如果 VUE_APP_CDN_URL
不为空,它会在生产环境构建时替换掉 VUE_APP_PUBLIC_PATH
。
一般不建议直接修改 .env
文件。你可以把它复制一份,改名为 .env.local
,它会覆盖 .env
里的同名变量。这些文件都是交由 Vue CLI 解析的,你也有官方文档可以参考。
编译 Prism.js
v-no 使用 babel-plugin-prismjs 对 Prism.js 按需编译。它的相关代码会被单独打包在 assets/js/prismjs.[hash].js
文件,体积会随着 PRISM_LANGUAGES
环境变量的改动而产生变化。
但我不知道为什么如果不修改导入了 Prism.js 的代码文件,它就不会使用新的环境变量进行编译。具体表现为编译后的 prismjs.[hash].js
文件的大小和 Hash 值都没有发生变化。
为了确保对 Prism.js 相关变量的更新能够生效,你需要在编译前对 src/ts/async/prismjs.ts
做出一点不影响代码逻辑的小改动。比如增加一个空行,等编译完成再把它删去。
- This page is open source, improve it