Sergey Lapin
Sergey Lapin

Reputation: 1016

Current file path in webpack

Is there any way to receive current file path, like in requirejs?

define(['module'], function (module) {
    console.log(module.uri)
});

Upvotes: 31

Views: 33539

Answers (3)

ilya
ilya

Reputation: 129

Try webpack.DefinePlugin with webpack.DefinePlugin.runtimeValue. It gives real constants, which can be used in ES6 import and require().

Webpack configuration:

new webpack.DefinePlugin({
    __NAME: webpack.DefinePlugin.runtimeValue(
        v => {
            const res = v.module.rawRequest.substr(2)
            return JSON.stringify(res); // Strings need to be wrapped in quotes
        }, []
    )
})

// OR

new webpack.DefinePlugin(
    __NAME: webpack.DefinePlugin.runtimeValue(
        v => {
            const res = v.module.rawRequest.substr(2)
            return `'${res.substr(0, res.lastIndexOf('.'))}'`
        }, []
    )
})

Source file:

// require "<filename>.html" from "<filename>.js"
const html = require(`./${__NAME}.html`)

Upvotes: 5

Tobias K.
Tobias K.

Reputation: 12167

Yep there is one: __filename.

But by default webpack doesn't leak path information and you need to set a config flag to get real filename instead of a mock ("/index.js").

// /home/project/webpack.config.js
module.exports = {
  context: __dirname,
  node: {
    __filename: true
  }
}

Than you can use __filename get the current filename relative to the context option:

// in /home/project/dir/file.js
console.log(__filename);
// => logs "dir/file.js"

The filename is only embedded into modules where __filename is used. So you don't have to be affraid that paths are leaked from other modules.

Upvotes: 55

P-A
P-A

Reputation: 1278

To get the filename an the dir name I added this to the web pack config

node : {
   __filename: true,
   __dirname: true,
},

setting the context to __dirname messed up my web pack config since I have my webpackconfig not placed in root but the paths are setup that way

Upvotes: 7

Related Questions