次のような.vue
テンプレートを使用できるツールはありますか。
<template>
<div>Hello, {{ thing }}</div>
</template>
<script>
export default {
data() { return { thing: 'World' }; }
}
</script>
<style>
div { background: red; }
</style>
そして、次のように.js
ファイルに変換します。
export default {
template: `
<div>Hello {{ thing }}</div>
`,
data() {
return {
thing: 'World'
}
}
}
(CSSでどのような魔法が使われるかはわかりませんが、何かを行うでしょう。)
うまく機能するネイティブブラウザモジュールを使用しようとしていますが、.vue
ファイル構文を使用したいのですが、それはいくつかの素晴らしい機能を提供します。 WebpackやBrowserifyのようなバンドラーの使用は避けたいのですが。
私はバベルを使用しています。 transform-vue-jsx
プラグインがありますが、.vue
形式を処理できず、JSXを変換するだけです。
vue-template-compiler を利用して、*。vueファイルを解析し、関連するセクションを抽出できます。
私は仕事をするはずのノードスクリプトを書きました:
convert.js
const compiler = require('vue-template-compiler');
let content = '';
process.stdin.resume();
process.stdin.on('data', buf => {
content += buf.toString();
});
process.stdin.on('end', () => {
const parsed = compiler.parseComponent(content);
const template = parsed.template ? parsed.template.content : '';
const script = parsed.script ? parsed.script.content : '';
const templateEscaped = template.trim().replace(/`/g, '\\`');
const scriptWithTemplate = script.match(/export default ?\{/)
? script.replace(/export default ?\{/, `$&\n\ttemplate: \`\n${templateEscaped}\`,`)
: `${script}\n export default {\n\ttemplate: \`\n${templateEscaped}\`};`;
process.stdout.write(scriptWithTemplate);
});
すべての* .vueファイルを* .vue.jsに変換するには、*。vueファイルを含むディレクトリ内で次のbashコマンドを実行します(LinuxまたはmacOSを使用している場合)。
find . -name '*.vue' -exec bash -c 'node convert.js < "{}" > "{}.js"' \;
これにより、次の変換が行われます。
foo.vue
<template>
<div>a</div>
</template>
<script>
export default {
name: 'foo',
};
</script>
<style>
/* Won't be extracted */
</style>
foo.vue.js(生成)
export default {
template: `
<div>a</div>
`,
name: 'foo',
};
スクリプトを微調整して、スタイルの抽出(ただし、それを処理したい場合)と空白の修正などを処理することをお勧めします。
これはTypeScriptの私の編集です
const parser = require("vue-template-compiler");
const fs = require("fs");
const path = require("path");
const glob = require("glob");
function getFiles(src, callback) {
glob(src + "/**/*.vue", callback);
}
getFiles(path.join(__dirname, "../src"), function(err, filePaths) {
if (err) {
console.log("Error", err);
} else {
filePaths.forEach(filePath => {
fs.readFile(filePath, "utf8", (err, data) => {
if (err) throw err;
const parsed = parser.parseComponent(data);
if (!parsed.script) {
return;
}
fs.writeFile(
filePath.replace("vue", "ts"),
parsed.script.content,
err => {
if (err) throw err;
console.log(`The file ${filePath} has been created!`);
}
);
});
});
}
});
Sonarcubeは現在vue SFCをサポートしていないため、typscriptコードのsonarcube静的分析に使用しています。
Gitlabパイプラインで実行しているため、クリーンアップはありません。パイプラインが完了すると、すべて自動的にクリーンアップされます。
ありがとう:)