Skip to content

Auto-add names to factory functions in FunctionModuleTemplatePlugin#4858

Closed
sophiebits wants to merge 1 commit into
webpack:masterfrom
sophiebits:patch-1
Closed

Auto-add names to factory functions in FunctionModuleTemplatePlugin#4858
sophiebits wants to merge 1 commit into
webpack:masterfrom
sophiebits:patch-1

Conversation

@sophiebits

@sophiebits sophiebits commented May 11, 2017

Copy link
Copy Markdown

I was trying to profile my app's startup in the Chrome devtools. I got this:

image

Unfortunately, each of the "(anonymous)" blocks is a module factory created by webpack, and it's not easy to tell which is which.

This commit adds a slightly mangled version of the path name as that factory function's name, which gives us a profile that is actually useful:

image

Much better.

~~

What kind of change does this PR introduce?

minor feature

Did you add tests for your changes?

no

Does this PR introduce a breaking change?

no

I was trying to profile my app's startup in the Chrome devtools. I got this:

![image](https://cloud.githubusercontent.com/assets/6820/25933551/5d0f4d10-35cc-11e7-8726-08396a7a96b5.png)

Unfortunately, each of the "(anonymous)" blocks is a module factory created by webpack, and it's not easy to tell which is which.

This commit adds a slightly mangled version of the path name as that factory function's name, which gives us a profile that is actually useful:

![image](https://cloud.githubusercontent.com/assets/6820/25933580/9d2e8820-35cc-11e7-8c8f-c94da92d1286.png)
@jsf-clabot

jsf-clabot commented May 11, 2017

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@sophiebits

Copy link
Copy Markdown
Author

Just putting this up for a discussion; happy to do the work to add/update tests if this seems desirable.

cc @gaearon since I bet you'd like this (I was profiling a CRA app)

@gaearon

gaearon commented May 11, 2017

Copy link
Copy Markdown
Contributor

I like this! Maybe _ would work better as a separator though? $ looks a bit scary to me.

@sophiebits

Copy link
Copy Markdown
Author

I wanted to keep in-file separators (ex: the dot before an extension) as well as slashes (as $). If we strip the former then we can make the latter an underscore.

@sophiebits

Copy link
Copy Markdown
Author

Even switching them might look better actually. I'll try.

@sokra

sokra commented May 14, 2017

Copy link
Copy Markdown
Member

There is already a Template.toIdentifier (lib/Template.js) function you could use to create the names.

@sokra

sokra commented May 21, 2017

Copy link
Copy Markdown
Member

Just putting this up for a discussion; happy to do the work to add/update tests if this seems desirable.

I like it.

@webpack-bot

Copy link
Copy Markdown
Contributor

@spicyj Please review the following output log for errors:

Worker information [...]
Build system information [...]
$ export DEBIAN_FRONTEND=noninteractive [...]
Fix WWDRCA Certificate
$ rvm use
Warning! PATH is not properly set up, '/Users/travis/.rvm/gems/ruby-2.0.0-p648/bin' is not at first place,
         usually this is caused by shell initialization files - check them for 'PATH=...' entries,
         it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
         to fix temporarily in this shell session run: 'rvm use ruby-2.0.0-p648'.
Using /Users/travis/.rvm/gems/ruby-2.0.0-p648

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions

Setting environment variables from .travis.yml
$ export NO_WATCH_TESTS=1
$ export JOB_PART=test

$ export PATH=./node_modules/.bin:$PATH
Updating nvm
$ export YARN_GPG=no [...]
Setting up build cache [...]
$ node --version
v7.10.0
$ npm --version
4.2.0
$ nvm --version
0.33.2
$ npm run travis:$JOB_PART

> [email protected] travis:test /Users/travis/build/webpack/webpack
> npm run cover:min


> [email protected] cover:min /Users/travis/build/webpack/webpack
> node --harmony ./node_modules/.bin/istanbul cover -x '**/*.runtime.js' --report lcovonly node_modules/mocha/bin/_mocha -- test/*.test.js

Failed to parse file: /Users/travis/build/webpack/webpack/lib/FunctionModuleTemplatePlugin.js
Transformation error; return original code
{ Error: Line 19: Unexpected token :
    at constructError (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2407:21)
    at createError (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2426:17)
    at throwUnexpectedToken (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2505:15)
    at parsePrimaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3307:13)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3704:25)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parseLexicalBinding (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4105:24)
    at parseBindingList (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4116:21)
    at parseLexicalDeclaration (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4181:24)
    at parseFunctionSourceElements (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4869:23)
    at parseFunctionExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5074:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parseArguments (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3327:28)
    at parseLeftHandSideExpressionAllowCall (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3426:24)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3519:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parseExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3942:16)
    at parseStatement (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4799:16)
    at parseFunctionSourceElements (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4869:23)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parsePropertyFunction (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2835:16)
    at parsePropertyMethodFunction (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2857:18)
    at tryParseMethodDefinition (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2988:21)
    at parseClassBody (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5119:26)
    at parseClassDeclaration (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5169:21)
    at parseFunctionSourceElements (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4869:23)
    at parseFunctionExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5074:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseGroupExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3162:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:2663:18)
    at parseExpression (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:3942:16)
    at parseExpressionStatement (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:4222:20)
    at parseScriptBody (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5490:25)
    at parseProgram (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5506:16)
    at Object.parse (/Users/travis/build/webpack/webpack/node_modules/esprima/esprima.js:5690:23)
    at Instrumenter.instrumentSync (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/instrumenter.js:459:31)
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:54:31
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:105:23)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/travis/build/webpack/webpack/lib/FunctionModulePlugin.js:9:74)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:107:24)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/travis/build/webpack/webpack/lib/WebpackOptionsApply.js:9:244)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:107:24)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/travis/build/webpack/webpack/lib/webpack.js:9:331)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:107:24)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/travis/build/webpack/webpack/test/Compiler-caching.test.js:8:17)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:109:37)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at require (internal/module.js:20:19)
    at /Users/travis/build/webpack/webpack/node_modules/mocha/lib/mocha.js:222:27
    at Array.forEach (native)
    at Mocha.loadFiles (/Users/travis/build/webpack/webpack/node_modules/mocha/lib/mocha.js:219:14)
    at Mocha.run (/Users/travis/build/webpack/webpack/node_modules/mocha/lib/mocha.js:487:10)
    at Object.<anonymous> (/Users/travis/build/webpack/webpack/node_modules/mocha/bin/_mocha:459:18)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Object.Module._extensions.(anonymous function) [as .js] (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/hook.js:109:37)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Function.Module.runMain (module.js:605:10)
    at runFn (/Users/travis/build/webpack/webpack/node_modules/istanbul/lib/command/common/run-with-cover.js:122:16)
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/lib/command/common/run-with-cover.js:251:17
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/lib/util/file-matcher.js:68:16
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:52:16
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:361:13
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:52:16
    at done (/Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:246:17)
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:44:16
    at /Users/travis/build/webpack/webpack/node_modules/istanbul/node_modules/async/lib/async.js:358:17
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9) lineNumber: 19, description: 'Unexpected token :', index: 812 }

See complete report here.

@sokra

sokra commented Jun 1, 2017

Copy link
Copy Markdown
Member

This PR is not needed.

You can use the NamedModulesPlugin and devtools will display module names in profiler. This is superior to this PR as it uses more readable names instead of identifier-ed named.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants