Как читать 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'),
    })
]
Другие вопросы по тегам