阿八博客
  • 100000+

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

[webpack]Parser 解析

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/1010/116968.html

这里终于把 提取到cube和square的源头给找到了:

const result = this.parser.parse(                    this._ast || this._source.source(),                    {                        current: this,                        module: this,                        compilation: compilation,                        options: options                    },                    (err, result) => {                        if (err) {                            handleParseError(err);                        } else {                            handleParseResult(result);                        }                    }                );                if (result !== undefined) {                    // parse is sync                    handleParseResult(result);                }

this.parser.parse:

神秘的 parser:

// Syntax: https://developer.mozilla.org/en/SpiderMonkey/Parser_APIconst acorn = require("acorn");

解析AST:

ast = Parser.parse(source, {                sourceType: this.sourceType,                onComment: comments            });

Parser.parse如下:

    static parse(code, options) {        const type = options ? options.sourceType : "module";        const parserOptions = Object.assign(            Object.create(null),            defaultParserOptions,            options        );        if (type === "auto") {            parserOptions.sourceType = "module";        } else if (parserOptions.sourceType === "script") {            parserOptions.allowReturnOutsideFunction = true;        }        let ast;        let error;        let threw = false;        try {            ast = acornParser.parse(code, parserOptions);        } catch (e) {            error = e;            threw = true;        }        if (threw && type === "auto") {            parserOptions.sourceType = "script";            parserOptions.allowReturnOutsideFunction = true;            if (Array.isArray(parserOptions.onComment)) {                parserOptions.onComment.length = 0;            }            try {                ast = acornParser.parse(code, parserOptions);                threw = false;            } catch (e) {                threw = true;            }        }        if (threw) {            throw error;        }        return ast;    }

导出的变量还可以时其他地方import进来的:

if (statement.source) {            source = statement.source.value;            this.hooks.exportImport.call(statement, source);        } else {            this.hooks.export.call(statement);        }

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!