manifest.json
Chrome 拡張機能で使用されるファイルを、より「スマート」なプログラム的な方法で組み立てたいと思います。依存関係の解決には npm を使用しており、これには「名前」、「説明」、「バージョン」など、ファイルpackage.json
と共有されるフィールドがいくつか含まれています。manifest.json
manifest.json
Chrome 固有のものをすべて含み、適切な場所に共有値を入力する部分ファイルのようなものを定義する方法はありますか? Gulp ではこれが非常に簡単であることがわかりました。
var gulp = require('gulp');
var fs = require('fs');
var jeditor = require('gulp-json-editor');
gulp.task('manifest', function() {
var pkg = JSON.parse(fs.readFileSync('./package.json'));
gulp.src('./manifest.json')
.pipe(jeditor({
'name': pkg.name,
'description': pkg.description,
'version': pkg.version,
'author': pkg.author,
'homepage_url': pkg.homepage,
}))
.pipe(gulp.dest("./dist"));
});
この目的のために設計された npm パッケージが存在するとしても、このようなことが一般的にどのように行われるのかを誰か説明してもらえますか? Webpack 2 には JSON ローダーが組み込まれていることは知っていますが、このような場合にそれがどのように使用されるのかはわかりません。
ベストアンサー1
実際には@user108471のものよりもエレガントな解決策があります(それに触発されていますが)。それはcopy-webpack-plugin
. そのtransform
manifest.json
この機能を使用すると、コピー先にコピーする前に、必要な値をその場で追加できます。
これには 2 つの利点があります。
- 余分な不要な-bundleを生成しません
manifest.js
(@bronson の解決策これも修正されます) - 他のファイルで
require
それをする必要はありません(意味的に逆のように思えます)manifest.json
.js
最小限の設定は次のようになります。
webpack.config.js
// you can just require .json, saves the 'fs'-hassle
let package = require('./package.json');
function modify(buffer) {
// copy-webpack-plugin passes a buffer
var manifest = JSON.parse(buffer.toString());
// make any modifications you like, such as
manifest.version = package.version;
// pretty print to JSON with two spaces
manifest_JSON = JSON.stringify(manifest, null, 2);
return manifest_JSON;
}
module.exports = {
// ...
plugins: [
new CopyWebpackPlugin([
{
from: "./src/manifest.json",
to: "./dist/manifest.json",
transform (content, path) {
return modify(content)
}
}])
]
}