Pelican 在 Windows 下的静态文件及目录拷贝

此文乃 2 个月前的一篇草稿整理而成。

今天在网上看到有人发布了整理过后的《七天学会 NodeJS》,就瞟了一下(简直就是天书),不过其中的『Path(路径)』一节看了却很有感触,不免想起 刚折腾 Pelican 时遇到相同问题时的情景。

在旧版 Pelican 中,如果我们想定义静态文件,使它在每次生成的时候拷贝到 output 目录,以 robots.txt 为例,则我们可以在 content/extra 下放置定义好的 robots.txt 文件,并在 pelicanconf.py 中更改或添加 FILES_TO_COPY项:

FILES_TO_COPY = (
    ("extra/robots.txt", "robots.txt"),
)

3.3 版的 Pelican 废弃了 FILES_TO_COPY 函数,转而使用 STATIC_PATHSEXTRA_PATH_METADATA 进行代替:

#静态目录
STATIC_PATHS = [
    'images',
    ]
#静态文件
EXTRA_PATH_METADATA = {
    'extra/robots.txt': {'path': 'robots.txt'},
    }

然而在 Windows 下,该函数是无效的,估计是因为 Windows 的路径写法对于斜杠(/)与反斜杠(\)的定义与大众定义不同。(经查阅,的确如此)

我最后在 pelicanconf.py 中的写法如下:

EXTRA_PATH_METADATA = {
os.path.join('extra', 'robots.txt'): {'path': 'robots.txt'},
os.path.join('extra', 'jquery.min.map'): {'path': 'jquery.min.map'},
os.path.join('extra', 'CNAME'): {'path': 'CNAME'},
}

当时不太了解具体的原理,『Path(路径)』一节给出的解释是:path.join 将传入的多个路径拼接为标准路径。该方法可避免手工拼接路径字符串的繁琐,并且能在不同系统下正确使用相应的路径分隔符。如:

path.join('foo', '..', 'bar', 'baz/foo'); 
// 'bar/baz/foo' on OSX and Linux
// 'bar\\baz\\foo' on Windows

这样一来就好理解多了,记录一下……

update 2015.03.05:Windows 与 Linux 的路径分隔符差异是一个需要注意的地方,前阵子将 Windows 中 Firefox 下的正常 uc 脚本拿到 Linux 下去使用结果发现没反应,检查好久才发现是路径分隔符在作祟。

全世界是不是都在下雨……

文章作者
发布时间
最后修改
2015-03-05 22:32
分类
标签