Текущий путь к файлу в webpack

Есть ли способ получить текущий путь к файлу, например, в requirejs?

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

Ответ 1

Да, есть один: __filename.

Но по умолчанию webpack не утечка информации о пути, и вам нужно установить флаг config, чтобы получить реальное имя файла вместо mock ("/index.js").

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

Чем вы можете использовать __filename получить текущее имя файла относительно опции context:

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

Имя файла только встроено в модули, где используется __filename. Поэтому вам не нужно опасаться, что пути просочились из других модулей.

Ответ 2

Чтобы получить имя файла с именем dir, я добавил его в конфигурацию веб-пакета

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

настройка контекста на __dirname испортила мой конфигуратор веб-пакета, так как у меня есть мой webpackconfig, не помещенный в корневой каталог, но пути настраиваются таким образом

Ответ 3

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')