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