Mike Priest
Mike Priest

Reputation: 177

Flow required module not found

Using Webpack 2, Flow 0.46.0

I have a pretty large app I am developing, so am using Webpack resolve modules to create alias import names e.g. '../../../../constants/ServiceURI' to 'constants/ServiceURI'

Everything works fine until I add flow. There must be a way to use mapper or resolve_dirname to fix this, but I cannot figure out how. No matter what I do it breaks flow.

I really want to use flow, but this is a blocker for me.

Project structure:

./flowconfig
./webpack.config.js
./src
    /js
        /constants
        /actions
        /...
    /css

Webpack config looks like:

resolve: {
        modules: [
            path.resolve('./src/js'),
            path.resolve('./src/js/constants'),
            'node_modules'
        ],
        extensions: ['.js', '.jsx']

Flow config looks like:

[ignore]
.*/node_modules/*

[include]
<PROJECT_ROOT>/src/js/

[libs]

[options]
esproposal.class_static_fields=enable
esproposal.class_instance_fields=enable
esproposal.export_star_as=enable
esproposal.decorators=ignore

# Tried this
module.name_mapper='^constants$' -> '<PROJECT_ROOT>/src/js/constants'

# Tried using this too
module.system.node.resolve_dirname=./src/js

module.system=haste
munge_underscores=true

[version]
0.46.0

Flow Error:

rc/js/actions/ActionActivity.js:6
  6: import { ACTIVITY_API } from 'constants/ServiceURI'
                                  ^^^^^^^^^^^^^^^^^^^^^^ 
constants/ServiceURI. Required module not found

Upvotes: 1

Views: 1789

Answers (1)

Michael Jungo
Michael Jungo

Reputation: 33010

The regular expression you're using in the module.name_mapper does not match constants/ServiceURI. It only matches exactly constants. You additionally need to match anything that comes after constants to be able to resolve all modules inside the constants directory.

module.name_mapper='^constants/\(.*\)$' -> '<PROJECT_ROOT>/src/js/constants/\1'

Where \( and \) create a capturing group (the slashes are required), which you can refer to as \1. For more information see module.name_mapper.

Upvotes: 3

Related Questions