网上这样的垃圾帖子估计没上万,但上千总有的吧,为什么我又搞一篇出来?
这个问题问的好,其他写类似主题的人中有不少也应该想过这个问题,最终还是决定要写自己的一篇。除了专门为了生产垃圾信息的AI人以外,剩下的,应该都是遇到了”奇怪的问题”,最终觉得还是有必要写出来记录下。
这种想法在我过去六年接触Linux开始,体会是越来越深。Linux开源的系统赋予程序员么近乎无限的自由,但无助于解决碎片化的问题。特别是当涉及缺乏利益驱动的免费开源程序时,当“爱”用尽时,自然留下了烂摊子。
即使不是烂摊子,那些相互之间的依赖,嵌套着的程序,对于最终使用者来说,在不同的环境下,还是会遇到开发者们感觉“匪夷所思”的问题。
怎么办?
写到这里再想想,可能所有教程都会遇到上边的问题吧,只是在Linux这个平台上,这这样的情况相对突出一些罢了。
根本原因在于这种比较复杂麻烦的事,必须做,但不需要经常做,但只做一次最终肯定会忘,而忘记了必然有一天需要还的,怎么办?写个教程教未来的自己吧!着重记录原理,提及踩的坑,下次可以立即上手就好。
本着这样的精神,以下开始教程啦:
1. hexo的运行基础 hexo作为一个JS程序,想跑起来,根据官网,至少需要Node.js和Git,下载安装即可,我用的LTS版本。Node.js安装时还会安装chocolatey,记得机器科学上网,当然,即使科学了,用时也很长。为了节省时间,装好了赶紧蹭蹭首富的光吧。
切换npm镜像地址的程序:
1 2 3 4 5 6 7 npm --registry https://registry.npm.taobao.org install node-red-contrib-composer@latest #临时使用淘宝源 npm config set registry https://registry.npm.taobao.org #全局配置切换到淘宝源 # npm config set registry http://www.npmjs.org #全局配置切换到官方源 npm info hexo-cli #检测是否切换到了淘宝源
如果安装过程中没有选择windows组件,那么安装node.js后可以在管理员权限下的PowerShell中输入npm install -g windows-build-tools
也可以自己安装,相关教程
2. 安装hexo 使用Node.js的包管理器安装
注意!是hexo-cli ,不是hexo!!
-g
这个扩展表示把hexo安装成为全局程序,使命令行全局可用hexo
命令。用-S
则不能,另外powershell不行,用cmd吧。此时hexo是安装在全局预设目录下,而不是当前的项目文件夹下。
此外,相应的还有如下几种选择:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 npm install X -g 安装模块到全局,不会在项目node_modules目录中保存模块包。 不会将模块依赖写入devDependencies或dependencies 节点。 运行 npm install 初始化项目时不会下载模块。 具体想知道装在哪里,可以npm config ls,安装完成后也会显示位置。 npm install X 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X --save 同 npm install X -S 会把X包安装到node_modules目录中 会在package.json的dependencies属性下添加X 之后运行npm install命令时,会自动安装X到node_modules目录中 之后运行npm install --production或者注明NODE_ENV变量值为production时,会自动安装msbuild到node_modules目录中,即是在线上环境运行时会将包安装 npm install X –save-dev 同 npm install X -D 会把X包安装到node_modules目录中 会在package.json的devDependencies属性下添加X 之后运行npm install命令时,会自动安装X到node_modules目录中 之后运行npm install –production或者注明NODE_ENV变量值为production时,不会自动安装X到node_modules目录中 使用原则: devDependencies 节点下的模块是我们在开发时需要用的,比如项目中使用的 gulp ,压缩css、js的模块。这些模块在我们的项目部署后是不需要的,所以我们可以使用--save-dev的形式安装。像 express 这些模块是项目运行必备的,应该安装在 dependencies 节点下,所以我们应该使用--save的形式安装。 总结为一句话:运行时需要用到的包使用––save,否则使用––save-dev。 作者:JuanitaLee 链接:https://www.jianshu.com/p/920c1a6e999c 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3. 初始化hexo 1 2 3 hexo init <folder> # 创建网站目录,并从github上pull模板下来 cd <folder> npm install # 根据模板的package,安装各种模块
安装好后,会提示你xx packages are looking for funding
。这里没有其他意思,真的是字面上的意思,有xx个包的开发者正在寻求资金支持,输入npm fund
就可找到详细的链接了,如果有意愿和余力,当然是鼓励支持呀!
如果不想看到这段话。。。就运行npm install --no-fund
4. 安装主题 1 2 npm install -S hexo-theme-next@latest # 安装next主题 # npm install -S hexo-theme-icarus
创建_config.icarus.yml
和_config.next.yml
配置文件
_config.yml
是站点设置,_config.xx.yml
是对应的主题设置。
Next主题设置页面中明确提示了:
Except home
and archives
, all custom pages under menu
section need to be created manually. See «Custom Page Support» .
1 2 3 4 hexo new page 404 hexo new page tags hexo new page categories hexo new page about
6.换gitignore 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 # Hexo init db.json node_modules/ public/ .deploy*/ # General .DS_Store .AppleDouble .LSOverride # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msm *.msp # Windows shortcuts *.lnk *~ # temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* # KDE directory preferences .directory # Linux trash folder which might appear on any partition or disk .Trash-* # .nfs files are created when an open file is removed but is still being accessed .nfs* # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # Typescript v1 declaration files typings/ # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json *.gem *.rbc /.config /coverage/ /InstalledFiles /pkg/ /spec/reports/ /spec/examples.txt /test/tmp/ /test/version_tmp/ /tmp/ # Used by dotenv library to load environment variables. # .env ## Specific to RubyMotion: .dat* .repl_history build/ *.bridgesupport build-iPhoneOS/ build-iPhoneSimulator/ ## Specific to RubyMotion (use of CocoaPods): # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # # vendor/Pods/ ## Documentation cache and generated files: /.yardoc/ /_yardoc/ /doc/ /rdoc/ ## Environment normalization: /.bundle/ /vendor/bundle /lib/bundler/man/ # for a library or gem, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # Gemfile.lock # .ruby-version # .ruby-gemset # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc # jekyll Gemfile.lock package-lock.json _site/ .sass-cache/ .jekyll-metadata _drafts/
7.更新hexo及主题的nodejs程序 在项目文件夹下运行npm update -S
即可。
安装npm install -g npm-check
然后运行npm-check
检查哪些包需要更新
最后npm-check -u
交互式升级包,升级后package.json也会同步更新。出了问题,就一个一个更新看看哪里有问题了。
其他可参考Hexo版本升级指南 | novnan’s notes
8. 部署 这里介绍两种部署到github的方式,还可以选择部署到vercel
8.1 hexo deployer 先要安装插件’npm install hexo-deployer-git –save’,然后在_config.yml
中设置deploy的相关内容,具体参见 。
2023.9.12更新
文档里举例的repo
写法是https的,在此次更新中遇到的问题,github action编译后无法推送,提示could not read Username for 'https://github.com': No such file or directory
。
我在本地使用hexo deploy时也是同样的问题,但多了一个提示,说使用用户名和密码的验证方式很早就禁止了。在为本地计算机配置git ssh,将repo地址改为ssh的写法后,一切顺利。
8.2 hexo-action 参考hexo-action ,利用github action来将网页发布到github pages.
注意,不要使用GitHub账户的那个key
,单独设置一个,而且添加时候也会提醒。。。偷不到懒的。。。
config里的deploy插件是必须的 ,另外注意9.1
中提到的git地址的写法,也就是git@github.com :xxx
2023.9.12测试补充 npm更新到10.0以上时,sma11black的脚本使用的node版本太旧了,在marketplace里找到一个更新:
1 2 - name: Hexo Action with Nodejs 17 uses: mark0smith/hexo-action@v0.0.3
用以上信息替换smallblack脚本中的uses
内容即可。
8.3 vercel 直接在vercel的网站上配置即可。
项目settings里有选择node.js版本的选项,最近的更新在这里卡了好久,本地更新自己的nodejs没用的。。。
9. 阅读时长 ≈ NaN:aN 按照教程开启阅读时长及字数统计后,如果不显示正确信息,那么记得清除数据:
10. 开启hexo-word-counter中的post图标选项 hexo-word-counter
插件说明中提到item_text_post
选项,实际测试设置无效,且next-theme的配置说明里也没有这个选项。
找到了next-theme的telegram群 ,群内大佬指点,应该修改:
1 2 post_meta: item_text: false
11.hexo 文章创建时间与更新时间 在_config.yml
下设置updated_option: 'date'
在_config.next.yml
下设置:
1 2 3 4 post_meta: updated_at: enable: true another_day: true
然后在文章头中设置updated
项,以此防止文件修改时间干扰最终显示。
12.powershell下使用hexo命令提示”此系统上禁止运行脚本” Set-ExecutionPolicy RemoteSigned
#此命令当时从哪里找的,忘了。。。
Set-ExecutionPolicy -ExecutionPolicy UNRESTRICTED
#刚才搜了一下,现在网上都是这个了。。。还没有测试过。。。
13.停止目录自动编号 在’_config.next.yml’中修改toc
下的number
为false
Changelog 2023/09/12 增加了软件更新的方式,完善了部署部分。
2022/11/21 增加停止目录自动编号的方法
2022/11/11 安装hexo还是要带着-g
的,不能带’-S’,否则hexo命令行不起作用
2022/11/09 此系统上禁止运行脚本