从raw.github.com引入js

56

我有一个GitHub演示页面,它链接到https://raw.github.com/.../master/.../file.js,这样每次更改.js文件时,我就不需要将其复制到gh-pages分支上。这在除了IE之外的所有浏览器中都有效,但是IE会发出以下投诉:

SEC7112: 由于mime类型不匹配,来自https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js的脚本被阻止

这个问题是因为文件是通过以下方式传输的造成的:

X-Content-Type-Options: nosniff
Content-Type: text/plain

有没有人有什么想法可以实现同样的功能?在不必总是要将它推送到gh-pages分支的情况下,以某种方式允许我链接到主分支(master)中的文件?

实际页面:http://cwolves.github.com/jQuery-iMask/

(小更新--我在这个确切的示例中更改了gh-pages以包括.js文件,因此IE不再出问题,但仍然希望得到任何反馈 :))

6个回答

61
你可以尝试使用https://rawgit.com/服务,将原始的github.com替换为rawgit.com即可。 更新 Rawgit服务(以前的Rawgithub)已关闭。

RawGit已经到了它有用寿命的尽头 2018年10月8日

在最近一个月内通过RawGit提供内容的GitHub代码库将继续提供服务,直至至少2019年10月。其他代码库的URL不再提供服务。

如果您目前正在使用RawGit,请尽快停止使用。


2
既然在这种情况下您已经在使用一个与GitHub无关的网站,那么您不妨使用http://cdnjs.com/。 - Daniel F
2
同时请查看raw.githack.com。这个想法是一样的,但它是一个纯nginx解决方案,这意味着它应该会运行得更快:) - neoascetic
@vsync 它可以工作,你现在只需要将 https 更改为 http。我会更新说明。支持 https 的计划正在路上。 - neoascetic
4
现在,https://raw.githack.com已支持https。只需将“raw.github.com”替换为“raw.githack.com”。 - neoascetic
1
现在这是 rawgit.com - Stéphane Laurent
显示剩余3条评论

14

我无法帮助您欺骗IE浏览器,我认为从那个角度来看,您所寻找的是不可能的(而且也不被鼓励,因为这不是Github原始URL的目的)。

但是,您可以自动提交更改到gh-pages并推送以使您的生活更轻松。您可以使用post-commit hook自动更新gh-pages分支中的相关文件。我已经编写了这样一个post-commit脚本,它会监视某些文件的更改并将其提交到另一个分支:

#!/bin/sh

WATCH_BRANCH="master"
WATCH_FILES="jquery-imask-min.js"
DEST_BRANCH="gh-pages"

# bail out if this commit wasn't made in the watched branch
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/');
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then
  exit 0
fi

# only update if watched files have changed in the latest commit
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH)
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then
  # checkout destination branch, then
  # checkout latest version of each watched file and add to index
  git checkout -q $DEST_BRANCH
  git pull -q
  SAVEIFS=$IFS
  IFS=$(echo -n "|")
  for file in $WATCH_FILES; do
    git checkout $WATCH_BRANCH -- $file
    git add $file > /dev/null
  done
  IFS=$SAVEIFS
  # commit with a chance to edit the message, then go back to watched branch
  LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH)
  git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT"
  git push origin $DEST_BRANCH
  git checkout -q $WATCH_BRANCH
fi

请注意,这是一般脚本,但我已经在顶部为您指定了配置变量。 $WATCH_FILES 可以设置为由大括号 | 分隔的文件列表,例如 index.html|js/jquery.js。路径必须相对于存储库的根目录指定。
如果您有任何问题,请告诉我,如果脚本对您有所帮助!

7
请看 raw.githack.com。这项服务的灵感来自 rawgit.com。我意识到使用整个框架(node.js + express.js)只是为了简单的请求代理而言过于浪费资源,所以仅使用 nginx 就实现了同样的功能。

将您的 github/gist 链接中的 "githubusercontent" 域名替换为 "githack" 即可完成!

此外,它还支持bitbucket.com - 只需将整个 bitbucket 域名替换为 bb.githack.com 即可。


6

Github的原始URL并不适合作为通用的Web主机。请将这些内容推送到适当的主机上,比如说pages.github.com。


2
是的,问题在于每次我提交到主分支时都需要额外的工作来切换到页面分支并复制文件。我只是想避免这种情况,因为它似乎是不必要的。 - user578895

2

0

我也在尝试实现这个。不过,我好像无法在我的代码库中使用@shelhamer的解决方案。以下是我更新后的提交钩子脚本,可以让它正常工作:

#!/bin/sh

WATCH_BRANCH="master"
WATCH_FILES="jquery-imask-min.js"
DEST_BRANCH="gh-pages"

# bail out if this commit wasn't made in the watched branch
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/');
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then
  exit 0
fi

# only update if watched files have changed in the latest commit
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH)
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then
  # checkout destination branch, then
  # checkout latest version of each watched file and add to index
  git checkout -q $DEST_BRANCH
  git pull -q
  SAVEIFS=$IFS
  IFS=$(echo -n "|")
  for file in $WATCH_FILES; do
    git checkout $WATCH_BRANCH -- $file
    git add $file > /dev/null
  done
  IFS=$SAVEIFS
  # commit with a chance to edit the message, then go back to watched branch
  LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH)
  git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT"
  git push origin $DEST_BRANCH
  git checkout -q $WATCH_BRANCH
fi

我不得不更新grep的使用方式,以使正则表达式成功匹配(在Windows的Git Bash shell中包含的grep实现中没有-P选项),添加git pullgit push origin $DEST_BRANCH。哦,我还不得不提前添加目录和文件的空壳(也许只添加目录就足够了?)。

由于这实际上是在进行推送,所以我认为最好将此脚本切换为后接收脚本而不是后提交脚本。否则,您可能会将代码推送到gh-pages,但它从未进入主分支[如果您选择不推送它]。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接