Skip to content

New [transformFileName] loader-specific option has been implemented.#738

Open
alexandrklimov wants to merge 1 commit into
babel:masterfrom
alexandrklimov:master
Open

New [transformFileName] loader-specific option has been implemented.#738
alexandrklimov wants to merge 1 commit into
babel:masterfrom
alexandrklimov:master

Conversation

@alexandrklimov

Copy link
Copy Markdown
REASON

A reason of implementing this feature is [VueJS TypeScript SFC]
compilation trouble with the usage of [babel, babel-loader].
Issue environment: webpback@4.25.x, vue@2.5.x., babel@7.1.x,
babel-loader@8.0.x)

Ordinal *.ts files are compiled OK
but SFC - the [babel-loader] doesn’t understand that
[vue-loader] gives it TypeScript-code.

I know, that similar problem solved for the [ts-loader] by its option
[appendTsSuffixTo], but I haven't found any similar settings for
[babel-loader].

DESCRIPTION

babel-loader have two file names field in a loader's options object:

  • filename
  • sourceFilename

If I've found out correctly, the last one is strongly bound
to a physical resource (a file) and the first one is a logical name
in some sense.
Consequently, I change the fist file name options.
Well, in my test build that solution works without any negative impact.

I think that the [ts-loader] solves such problem by similar solution.

OPTION'S STRUCTURE

transformFileName:{
pattern: RegEx,
replace: 'string_of_content_instead_of_regex'
}

    REASON

A reason of implementing this feature is [VueJS TypeScript SFC]
compilation trouble with the usage of [babel, babel-loader].
Issue environment:  webpback@4.25.x,  vue@2.5.x., babel@7.1.x,
babel-loader@8.0.x)

Ordinal *.ts files are compiled OK
but SFC-component - the [babel-loader] doesn’t understand that
[vue-loader] gives it TypeScript-code.

I know, that similar problem solved for the [ts-loader] by its option
[appendTsSuffixTo], but I haven't found any similar settings for
[babel-loader].

    DESCRIPTION

Webpack's loader have two file names field in a loader's options object:
filename
sourceFilename

If I've found out correctly, the last one is strongly bound
to a physical resource (a file) and the first one is a logical name
in some sense.
Consequently, I change the fist file name options.
Well, in my test build that solution works without any negative impact.

    OPTION'S STRUCTURE

transformFileName:{
    pattern: RegEx,
    replace: 'string_of_content_instead_of_regex'
}
@danez

danez commented Jan 4, 2019

Copy link
Copy Markdown
Member

Thanks for your PR.
I looked at ts-loader to see how the solve it. I think for the babel loader a more generic option makes sense in comparison to the appendTs(x)SuffixTo options.

Why did you choose to have an object with pattern and replacement? I would rather allow a function to be passed transformFileName: (currentFileName) => newFileName.

@alexandrklimov

Copy link
Copy Markdown
Author

Hello @danez !

Thank you for your review.

I've chosen the RegExp-based approach instead of function-base one coz I thought just about a context of my task - file name transdormation for right compilation.
Moreover, I am not too professional in JS development and in Babel using particularly and I try to provide a solution is as concise as possible.

Of course, your approach with a mapper function is more generic and flexible.

@alexandrklimov

Copy link
Copy Markdown
Author

Hi @asselinpaul

As far I know, if you don't use .vue files, babel-loader should be configured as usual.

@asselinpaul

Copy link
Copy Markdown

Forgot to mention, I am using .vue files 😟 . It works fine for .ts. @alexandrklimov

@alexandrklimov

alexandrklimov commented Feb 13, 2019

Copy link
Copy Markdown
Author

Briefly, without full description, problem is that there isn't any way to ask Babel to treated .vue-files as .ts ones, neither through babel-loader nor directly.
Or I just don't known about this way :)

This pull-request have been made for resolving this issue in tsc-style manner but it wasn't been applied at the first time.
Then I closed it accidentally and then after reopening I got current conflicts.

Though, I can fix these conflicts but there isn't any guarantee that the repository owner will apply my solution.

@alexandrklimov

Copy link
Copy Markdown
Author

It's so sad but I can't sight any progress in resolving this annoying problem with any way solution.

@asselinpaul

Copy link
Copy Markdown

@alexandrklimov let's see if this gets anywhere — I do see @danez 's point of using a function instead of the regex.

@alexandrklimov

alexandrklimov commented Feb 13, 2019

Copy link
Copy Markdown
Author

@asselinpaul Yes, I remember about this suggestion and it's absolutely OK for me, but I couldn't find neither any remark about that solution in documentation nor any commit, since the last my converation with @danez.
Be frankly, I check this problem the last time about a month ago.

Suggestion about function I treated just as a suggestion - may be it was a hint? :)

If the function is a final repository owner's solution - it's OK for me. I can fix my code for it.
I just would like to know a direction to appropriated pull request.

@asselinpaul

Copy link
Copy Markdown

This is still relevant to me. Happy to help if my help is required.

@asselinpaul

asselinpaul commented Mar 19, 2019

Copy link
Copy Markdown

https://github.com/Realytics/fork-ts-checker-webpack-plugin let's me typecheck TypeScript inside of Vue SFC (.vue) files but babel-loader still freaks out at the TypeScript syntax.

@light0x00

Copy link
Copy Markdown

i have same problem...

@Jdruwe

Jdruwe commented May 23, 2019

Copy link
Copy Markdown

Any update on this, I would also like to use the babel-loader for .vue files.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants