Current file path in webpack

2020-01-31 00:57发布

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

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

标签: webpack
3条回答
成全新的幸福
2楼-- · 2020-01-31 01:37

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

查看更多
我想做一个坏孩纸
3楼-- · 2020-01-31 01:58

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.

查看更多
来,给爷笑一个
4楼-- · 2020-01-31 01:58
Try `webpack.DefinePlugin` with `webpack.DefinePlugin.runtimeValue`. It gives real constants, which are good for `require()` and `import`

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('.'))}'`
		}, [])
	})

// your.html will be included in your.js
const html = require(`./${__NAME}.html`)
查看更多
登录 后发表回答