Как читать package.json из плагина webpack
В настоящее время я работаю над плагином веб-пакета и пытаюсь найти способ прочитать package.json
репо зовет мой плагин. Пока что любой метод, который я пробую, приводит к чтению плагинов. package.json
,
Есть ли способ получить доступ к этому файлу напрямую?
2 ответа
Вот поздний ответ, но я надеюсь, что это поможет другим. Я боролся с тем же и в итоге прочитал путь отprocess.env.npm_package_json
и создал переменные таким образом:
let packageJson = JSON.parse(require('fs').readFileSync(process.env.npm_package_json).toString());
let author = packageJson.author; // Your Name
let version = packageJson.version; // 1.0.0
Вы не можете быть уверены в том, где находится потребительский package.json. Но вы можете попробовать этот подход, здесь используется контекст webpack:
apply(compiler: Compiler) {
compiler.hooks.beforeRun.tap('HelloWorldPlugin', () => {
console.log(`Path where webpack was executed: ${ compiler.options.context }`);
console.log(require(`${ compiler.options.context }/package.json`));
})
}
Еще два подхода, которые также предполагают, что пользовательский package.json находится в том же каталоге, что и конфигурация webpack:
// via **compiler.inputFileSystem**
apply(compiler: Compiler) {
compiler.hooks.beforeRun.tap('HelloWorldPlugin', () => {
console.log(compiler.inputFileSystem.readFileSync('./package.json').toString());
})
}
// via **process.cwd()**
apply(compiler: Compiler) {
compiler.hooks.beforeRun.tap('HelloWorldPlugin', () => {
console.log(require('path').resolve(process.cwd(), 'package.json'));
})
}
Или вы можете просто передать его через params в файле webpack.config.js потребителя:
plugins: [
new HelloWorldPlugin({
packageJsonFile: path.resolve(__dirname, './package.json'),
})
]