fix precompile bug
This commit is contained in:
parent
c43a7e3404
commit
f5b845f1ef
33
gojs.go
33
gojs.go
@ -79,6 +79,7 @@ type PreCompiledCode struct {
|
|||||||
CodeLines map[string][]string
|
CodeLines map[string][]string
|
||||||
RealCodeLines map[string][]string
|
RealCodeLines map[string][]string
|
||||||
Imports map[string]string
|
Imports map[string]string
|
||||||
|
ImportedVar map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequirePlugins struct {
|
type RequirePlugins struct {
|
||||||
@ -141,8 +142,12 @@ func makeImport(moduleName, currentPath string, imported *map[string]string, log
|
|||||||
if importCode == "" {
|
if importCode == "" {
|
||||||
return "", "", "", searchList, nil
|
return "", "", "", searchList, nil
|
||||||
}
|
}
|
||||||
|
//importVar = (*fileToVar)[importFile]
|
||||||
|
//if importVar == "" {
|
||||||
importVar = fmt.Sprintf("_import_%d_%s", len(*imported), u.UniqueId())
|
importVar = fmt.Sprintf("_import_%d_%s", len(*imported), u.UniqueId())
|
||||||
|
// (*fileToVar)[importFile] = importVar
|
||||||
|
// fmt.Println("_import_=====", importFile, importVar)
|
||||||
|
//}
|
||||||
(*imported)[importFile] = importVar
|
(*imported)[importFile] = importVar
|
||||||
importCode = exportMatcher.ReplaceAllStringFunc(importCode, func(exportStr string) string {
|
importCode = exportMatcher.ReplaceAllStringFunc(importCode, func(exportStr string) string {
|
||||||
if strings.Contains(exportStr, "export default") {
|
if strings.Contains(exportStr, "export default") {
|
||||||
@ -173,14 +178,15 @@ func PreCompile(code, filename string, logger *log.Logger) (*PreCompiledCode, er
|
|||||||
CodeLines: make(map[string][]string),
|
CodeLines: make(map[string][]string),
|
||||||
RealCodeLines: make(map[string][]string),
|
RealCodeLines: make(map[string][]string),
|
||||||
Imports: make(map[string]string),
|
Imports: make(map[string]string),
|
||||||
|
ImportedVar: make(map[string]string),
|
||||||
}
|
}
|
||||||
var outErr error
|
var outErr error
|
||||||
imported := make(map[string]string)
|
|
||||||
|
|
||||||
tryPlugins := map[string]bool{}
|
tryPlugins := map[string]bool{}
|
||||||
|
//fmt.Println(filename, "===============\n", cc.FixedCode, "\n=================")
|
||||||
cc.FixedCode = importMatcher.ReplaceAllStringFunc(cc.FixedCode, func(importStr string) string {
|
cc.FixedCode = importMatcher.ReplaceAllStringFunc(cc.FixedCode, func(importStr string) string {
|
||||||
m := importMatcher.FindStringSubmatch(importStr)
|
m := importMatcher.FindStringSubmatch(importStr)
|
||||||
importVar := imported[m[2]]
|
importVar := cc.ImportedVar[m[2]]
|
||||||
if importVar == "" {
|
if importVar == "" {
|
||||||
baseName := path.Base(m[2])
|
baseName := path.Base(m[2])
|
||||||
jsFile := m[2]
|
jsFile := m[2]
|
||||||
@ -207,7 +213,7 @@ func PreCompile(code, filename string, logger *log.Logger) (*PreCompiledCode, er
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if varName, importCode, importFile, searchList, err := makeImport(m[2], filepath.Dir(cc.Filename), &imported, logger); err == nil {
|
if varName, importCode, importFile, searchList, err := makeImport(m[2], filepath.Dir(cc.Filename), &cc.ImportedVar, logger); err == nil {
|
||||||
if varName != "" && importCode != "" && importFile != "" {
|
if varName != "" && importCode != "" && importFile != "" {
|
||||||
cc.Imports[importFile] = importCode
|
cc.Imports[importFile] = importCode
|
||||||
// merge plugins from new import
|
// merge plugins from new import
|
||||||
@ -253,6 +259,7 @@ func PreCompile(code, filename string, logger *log.Logger) (*PreCompiledCode, er
|
|||||||
return "let " + m[1] + " = " + importVar
|
return "let " + m[1] + " = " + importVar
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
//fmt.Println(filename, "^^^^^^^^^^^^^^^^^^^\n", cc.FixedCode, "\n^^^^^^^^^^^^^^^^^^^==")
|
||||||
|
|
||||||
cc.FixedCode = flowMethodTypeMatcher.ReplaceAllString(cc.FixedCode, ") {")
|
cc.FixedCode = flowMethodTypeMatcher.ReplaceAllString(cc.FixedCode, ") {")
|
||||||
cc.FixedCode = functionArgsForFlowMatcher.ReplaceAllStringFunc(cc.FixedCode, func(str string) string {
|
cc.FixedCode = functionArgsForFlowMatcher.ReplaceAllStringFunc(cc.FixedCode, func(str string) string {
|
||||||
@ -309,13 +316,17 @@ func (rt *JSRuntime) runPreCompiled(cc *PreCompiledCode, isClosure bool, setToVa
|
|||||||
}
|
}
|
||||||
|
|
||||||
for impFilename, impCode := range cc.Imports {
|
for impFilename, impCode := range cc.Imports {
|
||||||
if r, err := rt.JsCtx.EvalFile(impCode, impFilename); err == nil {
|
importVar := rt.imported[impFilename]
|
||||||
r.Free()
|
if importVar == "" {
|
||||||
} else {
|
importVar = cc.ImportedVar[impFilename]
|
||||||
// 检查错误
|
if importVar == "" {
|
||||||
stack := rt.getJSError(err)
|
importVar = fmt.Sprintf("_import_%d_%s", len(rt.imported), u.UniqueId())
|
||||||
rt.logger.Error(err.Error(), "stack", stack)
|
cc.ImportedVar[impFilename] = importVar
|
||||||
return nil, &JSError{error: err}
|
}
|
||||||
|
if _, err := rt.run(impCode, true, importVar, impFilename); err != nil {
|
||||||
|
return nil, &JSError{error: err}
|
||||||
|
}
|
||||||
|
rt.imported[impFilename] = importVar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user