Skip to content
Permalink
Browse files

Fix the system cannot find the path specified (#17)

* 使用packr自动生成静态文件到.go文件,解决编译后可执行文件无法找到模版路径的问题

* 新增doPackr.sh & doPackr.bat实现对指定模版和数据集的packr打包

* 移除*-packr.go文件,由使用者进行打包静态文件

* 优化packr后的文件(使用sed删除不必要的.go文件)

* 优化packr后的文件(doPackr.bat)

* 增加doPackr的文档说明

* Docs: update
  • Loading branch information...
ElectricBubble authored and chenjiandongx committed Apr 8, 2019
1 parent 87d1c65 commit 38966c9712a252a6639f288caf2809bfc97ff5fa
Showing with 69 additions and 0 deletions.
  1. +31 −0 doPackr.bat
  2. +12 −0 doPackr.sh
  3. +26 −0 docs/docs/assets_file.md
@@ -0,0 +1,31 @@
@echo off
setlocal enabledelayedexpansion

set basePath=%CD%
set templatesPath=%basePath%\templates
set datasetsPath=%basePath%\datasets
cd %GOPATH%\src\github.com\gobuffalo\packr\packr
go run main.go -i %templatesPath%
go run main.go -i %datasetsPath%

cd %templatesPath%
for /f %%i in ('dir /b *-packr.go') do (set templatesPackrFile=%%i)
call::deleteLineContainsDotGo %templatesPackrFile%

cd %datasetsPath%
for /f %%i in ('dir /b *-packr.go') do (set datasetsPackrFile=%%i)
call::deleteLineContainsDotGo %datasetsPackrFile%

goto:end


:deleteLineContainsDotGo
for /f "delims=" %%i in (%~1) do (
set tmp=%%i
if "!tmp:.go=!"=="!tmp!" (echo %%i>>%~1.doPackr.bak)
)
move %~1.doPackr.bak %~1
goto:eof


:end
@@ -0,0 +1,12 @@
#!/bin/bash
basePath=$(cd `dirname $0`; pwd)
templatesPath=${basePath}/templates
datasetsPath=${basePath}/datasets
cd $GOPATH/src/github.com/gobuffalo/packr/packr
go run main.go -i ${templatesPath}
go run main.go -i ${datasetsPath}

templatesPackrFile=$(cd ${templatesPath}; ls | grep "\-packr.go")
datasetsPackrFile=$(cd ${datasetsPath}; ls | grep "\-packr.go")
sed -i '' '/.go\"/d' ${templatesPath}/${templatesPackrFile}
sed -i '' '/.go\"/d' ${datasetsPath}/${datasetsPackrFile}
@@ -58,3 +58,29 @@ func main() {
```

在一次 `Render()` 方法中只需要配置一次 `charts.InitOpts` 即可,如在 Page 的 Add() 方法中,只要其中一个图表能正确引用到的话那所有图表也就都能正常显示,因为他们都在同一个 HTML 文件中。

## 编译须知

在将目标程序编译成可执行文件的时候,需要先执行以下操作(一次即可)。

原因是调试期间 [packr](https://github.com/gobuffalo/packr) 可以在开发环境中找到 `go-echarts``datasets``templates` 的路径,但是编译后的可执行文件,在其他无 `go-echarts` 的环境中,将会报错

```shell
FindFirstFile src\$GOPATH\src\github.com\chenjiandongx\go-echarts\templates\routers.html: The system cannot find the path specified.
```

因此使用 [packr](https://github.com/gobuffalo/packr#building-a-binary-the-hard-way) 提供的打包方式,将 `datasets``templates` 中的静态文件打包进可执行文件中,确保 `go-echarts` 的正常使用。

Linux/MacOS
```bash
$ cd $GOPATH/src/github.com/chenjiandongx/go-echarts
$ ./doPackr.sh
```

Windows
```dos
$ cd %GOPATH%\src\github.com\chenjiandongx\go-echarts
$ doPackr.bat
```

以上操作将会在 `%GOPATH%\src\github.com\chenjiandongx\go-echarts\datasets``%GOPATH%\src\github.com\chenjiandongx\go-echarts\templates` 目录下生成 `*-packr.go` 文件,如 `a_datasets-packr``a_templates-packr.go`,用于替换原有的静态资源文件,相当于将静态文件的内容存储到 golang 中。

0 comments on commit 38966c9

Please sign in to comment.
You can’t perform that action at this time.