Есть ли способ получить текущий путь к файлу, например, в requirejs?
define(['module'], function (module) {
console.log(module.uri)
});
Есть ли способ получить текущий путь к файлу, например, в requirejs?
define(['module'], function (module) {
console.log(module.uri)
});
Да, есть один: __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
. Поэтому вам не нужно опасаться, что пути просочились из других модулей.
Чтобы получить имя файла с именем dir, я добавил его в конфигурацию веб-пакета
node : {
__filename: true,
__dirname: true,
},
настройка контекста на __dirname испортила мой конфигуратор веб-пакета, так как у меня есть мой webpackconfig, не помещенный в корневой каталог, но пути настраиваются таким образом
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')