è¯ãäžæ¥ãåéïŒææ°ã®HTMLã¹ã¿ãŒã¿ãŒãã³ãã¬ãŒã
ãéçºããŠãããšãã«ããã®äœ¿ãããããæ¡åŒµããããšãèããŸãããåœæããã®äœ¿çšãªãã·ã§ã³ã¯ããªããžããªã®ã¯ããŒã³äœæãšã¢ãŒã«ã€ãã®ããŠã³ããŒãã«éå®ãããŠããŸãããããã¯ãMicrosoft Visual Studioã³ãŒãã®HTMLã¹ãããããšæ¡åŒµæ©èœïŒHTMLãã³ãã¬ãŒãïŒãããã³ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒcreate-modern-templateïŒãã©ã®ããã«è¡šç€ºããããã瀺ããŠããŸãããã¡ããããããã®ããŒã«ã¯å®ç§ã«ã¯ã»ã©é ãã®ã§ãã§ããéãæ¹è¯ããŠãããŸããããããããããäœæããéçšã§ãç§ã¯ããªããšå ±æãããããã€ãã®è峿·±ãããšãåŠã³ãŸããã ãã®ããŒãã§ã¯ãã¹ãããããšæ¡åŒµæ©èœããããŠæ¬¡ã®CLIã«ã€ããŠèŠãŠãããŸãã
ãœãŒã¹ã³ãŒãã®ã¿ã«é¢å¿ãããå Žåã¯ãããã«ãªããžããªãžã®ãªã³ã¯ããããŸãã
ã¹ãããã
ã¹ãããããšã¯äœã§ããïŒã€ãŸããã¹ããããã¯ããšãã£ã¿ãŒãèªåå®äºïŒã³ãŒãå®äºïŒã«äœ¿çšãããã³ãã¬ãŒãã§ãã
VSCodeã«ã¯EmmetïŒå ¬åŒãµã€ããVisual Studio Codeã®EmmetïŒãçµã¿èŸŒãŸããŠãããã³ãŒãã®èšè¿°ã«åœ¹ç«ã€å€æ°ã®HTMLãCSSãããã³JSã¹ããããã䜿çšããŸãããšãã£ã¿ãŒïŒ.htmlïŒãå ¥åããTabããŒãŸãã¯EnterããŒãæŒããšã宿ããhtml5ããŒã¯ã¢ãããåŸãããŸããnav> ul> li * 3> a.link> imgãšå ¥åããTabããŒãæŒããšã次ã®ããã«ãªããŸãã
<nav>
<ul>
<li><a href="" class="link"><img src="" alt=""></a></li>
<li><a href="" class="link"><img src="" alt=""></a></li>
<li><a href="" class="link"><img src="" alt=""></a></li>
</ul>
</nav>
ç
çµã¿èŸŒã¿ã®ãã®ã«å ããŠãVSCodeã¯ã«ã¹ã¿ã ã¹ããããã䜿çšããæ©èœãæäŸããŸããããããäœæããã«ã¯ã[ãã¡ã€ã«]-> [èšå®]-> [ãŠãŒã¶ãŒã¹ãããã]ã«ç§»åããŸãïŒãŸãã¯ãå·Šäžé ã®[管ç]ãã¿ã³ãã¯ãªãã¯ããŠ[ãŠãŒã¶ãŒã¹ãããã]ãéžæããŸãïŒãåèšèªã®èšå®ã¯ã察å¿ããJSONãã¡ã€ã«ã«ä¿åãããŸãïŒhtml.jsonã®HTMLã®å Žåãjavascript.jsonã®JavaScriptã®å Žåãªã©ïŒã
JSã¹ããããã®äœæãç·Žç¿ããŸããããjavascript.jsonãã¡ã€ã«ãèŠã€ããŠéããŸãã
ã¹ãããããäœæããããã®ã«ãŒã«ãç°¡åã«èª¬æããã³ã¡ã³ãã衚瀺ãããŸããVSCodeã§ã«ã¹ã¿ã ã¹ãããããäœæããæ¹æ³ã®è©³çްã«ã€ããŠã¯ããã¡ããã芧ãã ããã
ç°¡åãªããšããå§ããŸããããconsole.logïŒïŒã®ã¹ãããããäœæããŸããããããã¯ãããã©ã®ããã«èŠãããã§ãïŒ
"Print to console": {
"prefix": "log",
"body": "console.log($0)",
"description": "Create console.log()"
},
- ã³ã³ãœãŒã«ã«åºå-ãªããžã§ã¯ãããŒãã¹ããããåïŒå¿ é ïŒ
- ãã¬ãã£ãã¯ã¹-ã¹ããããã®çç¥åœ¢ïŒå¿ é ïŒ
- body-ã¹ããããèªäœïŒå¿ é ïŒ
- $ number-ã¹ããããäœæåŸã®ã«ãŒãœã«äœçœ®ã$ 1-æåã®äœçœ®ã$ 2-2çªç®ãªã©ã$ 0-æåŸã®äœçœ®ïŒãªãã·ã§ã³ïŒ
- description-ã¹ããããã®èª¬æïŒãªãã·ã§ã³ïŒ
ãã¡ã€ã«ãä¿åããŸããã¹ã¯ãªããã«logãšå ¥åããTabããŒãŸãã¯EnterããŒãæŒããšãæ¬åŒ§ã®éã«ã«ãŒãœã«ã眮ãããconsole.logïŒïŒã衚瀺ãããŸãã
for-ofã«ãŒãã®ã¹ãããããäœæããŸãããã
"For-of loop": {
"prefix": "fo",
"body": [
"for (const ${1:item} of ${2:arr}) {",
"\t$0",
"}"
]
},
- è€æ°è¡ã®ã¹ããããã¯ãé åã䜿çšããŠäœæãããŸã
- $ {æ°å€ïŒå€}; $ {1ïŒitem}ã¯ãããã©ã«ãã®ã¢ã€ãã å€ãæã€æåã®ã«ãŒãœã«äœçœ®ãæå³ããŸãããã®å€ã¯ãã¹ãããããäœæããåŸãããã³ãã°ããç·šéããããã«ã«ãŒãœã«ã®æ¬¡ã®äœçœ®ã«ç§»åããåŸã«åŒ·èª¿è¡šç€ºãããŸã
- \ t-1ã€ã®ã€ã³ãã³ãïŒã®ã£ããã®éã¯ããšãã£ã¿ãŒã®å¯Ÿå¿ããèšå®ããŸãã¯ç§ã®å Žåã¯Prettieræ¡åŒµæ©èœã«ãã£ãŠæ±ºå®ãããŸãïŒã\ t \ t-2ã€ã®ã€ã³ãã³ããªã©ã
ã¹ã¯ãªããã«foãšå ¥åããTabããŒãŸãã¯EnterããŒãæŒããšã次ã®ããã«ãªããŸãã
for (const item of arr) {
}
ã¢ã€ãã ã匷調衚瀺ãããŸããTabããŒãæŒããšãarrã匷調衚瀺ãããŸããããäžåºŠTabããŒãæŒããŠã2è¡ç®ã«ç§»åããŸãã
ããã«ããã€ãã®äŸã瀺ããŸãã
"For-in loop": {
"prefix": "fi",
"body": [
"for (const ${1:key} in ${2:obj}) {",
"\t$0",
"}"
]
},
"Get one element": {
"prefix": "qs",
"body": "const $1 = ${2:document}.querySelector('$0')"
},
"Get all elements": {
"prefix": "qsa",
"body": "const $1 = [...${2:document}.querySelectorAll('$0')]"
},
"Add listener": {
"prefix": "al",
"body": [
"${1:document}.addEventListener('${2:click}', (${3:{ target }}) => {",
"\t$0",
"})"
]
},
"Async function": {
"prefix": "af",
"body": [
"const $1 = async ($2) => {",
"\ttry {",
"\t\tconst response = await fetch($3)",
"\t\tconst data = await res.json()",
"\t\t$0",
"\t} catch (err) {",
"\t\tconsole.error(err)",
"\t}",
"}"
]
}
HTMLã¹ãããããåãååã«åŸããŸããHTMLãã³ãã¬ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
{
"HTML Template": {
"prefix": "html",
"body": [
"<!DOCTYPE html>",
"<html",
"\tlang='en'",
"\tdir='ltr'",
"\titemscope",
"\titemtype='https://schema.org/WebPage'",
"\tprefix='og: http://ogp.me/ns#'",
">",
"\t<head>",
"\t\t<meta charset='UTF-8' />",
"\t\t<meta name='viewport' content='width=device-width, initial-scale=1' />",
"",
"\t\t<title>$1</title>",
"",
"\t\t<meta name='referrer' content='origin' />",
"\t\t<link rel='canonical' href='$0' />",
"\t\t<link rel='icon' type='image/png' href='./icons/64x64.png' />",
"\t\t<link rel='manifest' href='./manifest.json' />",
"",
"\t\t<!-- Security -->",
"\t\t<meta http-equiv='X-Content-Type-Options' content='nosniff' />",
"\t\t<meta http-equiv='X-XSS-Protection' content='1; mode=block' />",
"",
"\t\t<meta name='author' content='$3' />",
"\t\t<meta name='description' content='$2' />",
"\t\t<meta name='keywords' content='$4' />",
"",
"\t\t<meta itemprop='name' content='$1' />",
"\t\t<meta itemprop='description' content='$2' />",
"\t\t<meta itemprop='image' content='./icons/128x128.png' />",
"",
"\t\t<!-- Microsoft -->",
"\t\t<meta http-equiv='x-ua-compatible' content='ie=edge' />",
"\t\t<meta name='application-name' content='$1' />",
"\t\t<meta name='msapplication-tooltip' content='$2' />",
"\t\t<meta name='msapplication-starturl' content='/' />",
"\t\t<meta name='msapplication-config' content='browserconfig.xml' />",
"",
"\t\t<!-- Facebook -->",
"\t\t<meta property='og:type' content='website' />",
"\t\t<meta property='og:url' content='$0' />",
"\t\t<meta property='og:title' content='$1' />",
"\t\t<meta property='og:image' content='./icons/256x256.png' />",
"\t\t<meta property='og:site_name' content='$1' />",
"\t\t<meta property='og:description' content='$2' />",
"\t\t<meta property='og:locale' content='en_US' />",
"",
"\t\t<!-- Twitter -->",
"\t\t<meta name='twitter:title' content='$1' />",
"\t\t<meta name='twitter:description' content='$2' />",
"\t\t<meta name='twitter:url' content='$0' />",
"\t\t<meta name='twitter:image' content='./icons/128x128.png' />",
"",
"\t\t<!-- IOS -->",
"\t\t<meta name='apple-mobile-web-app-title' content='$1' />",
"\t\t<meta name='apple-mobile-web-app-capable' content='yes' />",
"\t\t<meta name='apple-mobile-web-app-status-bar-style' content='#222' />",
"\t\t<link rel='apple-touch-icon' href='./icons/256x256.png' />",
"",
"\t\t<!-- Android -->",
"\t\t<meta name='theme-color' content='#eee' />",
"\t\t<meta name='mobile-web-app-capable' content='yes' />",
"",
"\t\t<!-- Google Verification Tag -->",
"",
"\t\t<!-- Global site tag (gtag.js) - Google Analytics -->",
"",
"\t\t<!-- Global site tag (gtag.js) - Google Analytics -->",
"",
"\t\t<!-- Yandex Verification Tag -->",
"",
"\t\t<!-- Yandex.Metrika counter -->",
"",
"\t\t<!-- Mail Verification Tag -->",
"",
"\t\t<!-- JSON-LD -->",
"\t\t<script type='application/ld+json'>",
"\t\t\t{",
"\t\t\t\t'@context': 'http://schema.org/',",
"\t\t\t\t'@type': 'WebPage',",
"\t\t\t\t'name': '$1',",
"\t\t\t\t'image': [",
"\t\t\t\t\t'$0icons/512x512.png'",
"\t\t\t\t],",
"\t\t\t\t'author': {",
"\t\t\t\t\t'@type': 'Person',",
"\t\t\t\t\t'name': '$3'",
"\t\t\t\t},",
"\t\t\t\t'datePublished': '2020-11-20',",
"\t\t\t\t'description': '$2',",
"\t\t\t\t'keywords': '$4'",
"\t\t\t}",
"\t\t</script>",
"",
"\t\t<!-- Google Fonts -->",
"",
"\t\t<style>",
"\t\t\t/* Critical CSS */",
"\t\t</style>",
"",
"\t\t<link rel='preload' href='./css/style.css' as='style'>",
"\t\t<link rel='stylesheet' href='./css/style.css' />",
"",
"<link rel='preload' href='./script.js' as='script'>",
"\t</head>",
"\t<body>",
"\t\t<!-- HTML5 -->",
"\t\t<header>",
"\t\t\t<h1>$1</h1>",
"\t\t\t<nav>",
"\t\t\t\t<a href='#' target='_blank' rel='noopener'>Link 1</a>",
"\t\t\t\t<a href='#' target='_blank' rel='noopener'>Link 2</a>",
"\t\t\t</nav>",
"\t\t</header>",
"",
"\t\t<main></main>",
"",
"\t\t<footer>",
"\t\t\t<p>© 2020. All rights reserved</p>",
"\t\t</footer>",
"",
"\t\t<script src='./script.js' type='module'></script>",
"\t</body>",
"</html>"
],
"description": "Create Modern HTML Template"
}
}
htmlãšå ¥åããTabããŒãŸãã¯EnterããŒãæŒããšãããŒã¯ã¢ãããååŸãããŸããã«ãŒãœã«äœçœ®ã¯ãã¢ããªã±ãŒã·ã§ã³åïŒã¿ã€ãã«ïŒã説æïŒèª¬æïŒãäœæè ïŒäœæè ïŒãããŒã¯ãŒãïŒããŒã¯ãŒãïŒãã¢ãã¬ã¹ïŒurlïŒã®é åºã§å®çŸ©ãããŸãã
æ¡åŒµ
VSCodeãµã€ãã«ã¯ãæ¡åŒµæ©èœã®æ§ç¯ã«é¢ããåªããããã¥ã¡ã³ãããããŸãã
æ¡åŒµæ©èœã«ã¯ãã¹ãããããã©ãŒã ãšCLIãã©ãŒã ã®2ã€ã®ãªãã·ã§ã³ãäœæããŸããç§ãã¡ã¯ã第äºã®ãªãã·ã§ã³å ¬éããäºå®ã®Visual StudioããŒã±ãããã¬ã€ã¹ã
ã¹ãããã圢åŒã®æ¡åŒµæ©èœã®äŸïŒ
- JavaScriptïŒES6ïŒã³ãŒãã¹ãããã
- ES7 React / Redux / GraphQL / React-ãã€ãã£ãã¹ãããã
- VueVSCodeã¹ãããã
ãããããå®éã®ãCLIããããããCLIãã©ãŒã æ¡åŒµæ©èœã¯ããŸãäžè¬çã§ã¯ãããŸããã
ã¹ãããã圢åŒã®æ¡åŒµ
Node.jsãšGit ã«å ããŠãVSCodeã®æ¡åŒµæ©èœãéçºããã«ã¯ãããã«2ã€ã®ã©ã€ãã©ãªãããæ£ç¢ºã«ã¯1ã€ã®ã©ã€ãã©ãªãšãã©ã°ã€ã³ïŒyeomanãšgenerator-codeïŒãå¿ èŠã§ããããããã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŸãã
npm i -g yo generator-code
//
yarn global add yo generator-code
yo codeã³ãã³ããå®è¡ãã[New Code Snippets]ãéžæããŠã質åã«çããŸãã
以åã«äœæããHTMLã¹ãããããã¹ãããã/snippets.code-snippetsãã¡ã€ã«ã«ã³ããŒãïŒã¹ãããããã¡ã€ã«ã«jsonæ¡åŒµåãä»ããããšãã§ããŸãïŒãpackage.jsonãšREADME.mdãç·šéããŠãæ¡åŒµæ©èœãããŒã±ãããã¬ã€ã¹ã«å ¬éã§ããŸããã芧ã®ãšããããã¹ãŠãéåžžã«åçŽã§ããåçŽããããšæããCLIã®åœ¢ã§æ¡åŒµæ©èœãäœæããããšã«ããŸããã
CLIæ¡åŒµ
yocodeã³ãã³ããå床å®è¡ããŠãã ãããä»åã¯ãæ°ããæ¡åŒµæ©èœïŒTypeScriptïŒãéžæãïŒæããããšã¯ãããŸãããã³ãŒãã«ã¯TypeScriptãã»ãšãã©ãªãã®ã§ãå¿ èŠãªèª¬æãè¡ããŸãïŒã質åã«çããŸãã
æ¡åŒµæ©èœãæ©èœããŠããããšã確èªããã«ã¯ããšãã£ã¿ãŒã§ãããžã§ã¯ããéããŸãã
cd htmltemplate code .
å·ŠåŽã®F5ãŸãã¯[å®è¡]ãã¿ã³ïŒCtrl / Cmd + Shift + DïŒãæŒããäžéšã®[ãããã°ã®éå§]ãã¿ã³ãæŒããŸããèµ·åæã«ãšã©ãŒãçºçããããšããããŸãããã®å Žåãèµ·åããã£ã³ã»ã«ïŒãã£ã³ã»ã«ïŒããŠãæé ãç¹°ãè¿ããŸãã
éãããšãã£ã¿ãŒã§ã[衚瀺]-> [ã³ãã³ããã¬ãã]ïŒCtrl / Cmd + Shift + PïŒãã¯ãªãã¯ããhelloãšå ¥åããŠã[HelloWorld]ãéžæããŸãã
VSCodeããæ å ±ã¡ãã»ãŒãžãåãåãã察å¿ããã¡ãã»ãŒãžïŒããã§ãšãïŒãã³ã³ãœãŒã«ã«åãåããŸãã
ãããžã§ã¯ãå ã®ãã¹ãŠã®ãã¡ã€ã«ã®äžã§ãpackage.jsonãšsrc /extension.tsã«é¢å¿ããããŸããsrc / testãã£ã¬ã¯ããªãšvsc-extension-quickstart.mdãã¡ã€ã«ãåé€ã§ããŸãã
extension.tsïŒèªã¿ãããããããã«ã³ã¡ã³ããåé€ïŒãèŠãŠã¿ãŸãããã
// VSCode
import * as vscode from 'vscode'
// ,
export function activate(context: vscode.ExtensionContext) {
// , ,
//
console.log('Congratulations, your extension "htmltemplate" is now active!')
//
// -
// htmltemplate -
// helloWorld -
let disposable = vscode.commands.registerCommand(
'htmltemplate.helloWorld',
() => {
// ,
//
vscode.window.showInformationMessage('Hello World from htmltemplate!')
}
)
//
// , "/",
// ""
context.subscriptions.push(disposable)
}
// ,
export function deactivate() {}
éèŠãªãã€ã³ãïŒextension.tsã®ãextension.commandãã¯ãpackage.jsonã®activationEventsããã³ã³ãã³ããã£ãŒã«ãã®å€ãšäžèŽããå¿ èŠããããŸãã
"activationEvents": [
"onCommand:htmltemplate.helloWorld"
],
"contributes": {
"commands": [
{
"command": "htmltemplate.helloWorld",
"title": "Hello World"
}
]
},
- ã³ãã³ã-ã³ãã³ãã®ãªã¹ã
- ActivationEvents-ã³ãã³ãã®å®è¡äžã«åŒã³åºããã颿°
æ¡åŒµæ©èœã®éçºãå§ããŸãããã
æ¡åŒµæ©èœã¯ãæ©èœçã«create-react-appãŸãã¯vue-cliã«äŒŒãŠããå¿ èŠããããŸããcreateã³ãã³ãã§ãã¿ãŒã²ãããã£ã¬ã¯ããªã«å¿ èŠãªãã¹ãŠã®ãã¡ã€ã«ãå«ããããžã§ã¯ããäœæããŸããã
ãŸããpackage.jsonãç·šéããŸãããã
"displayName": "HTML Template",
"activationEvents": [
"onCommand:htmltemplate.create"
],
"contributes": {
"commands": [
{
"command": "htmltemplate.create",
"title": "Create Template"
}
]
},
ã¿ãŒã²ãããã£ã¬ã¯ããªã«ã³ããŒããããããžã§ã¯ããã¡ã€ã«ãæ ŒçŽããããã®src / componentsãã£ã¬ã¯ããªãäœæããŸãã
ES6ã¢ãžã¥ãŒã«ã®åœ¢åŒã§ãããžã§ã¯ããã¡ã€ã«ãäœæããŸãïŒVSCodeã¯ããã©ã«ãã§ES6ã¢ãžã¥ãŒã«ã䜿çšããŸãïŒãšã¯ã¹ããŒã/ã€ã³ããŒãïŒããCommonJSã¢ãžã¥ãŒã«ããµããŒãããŸãïŒmodule.exports / requireïŒïŒïŒindex.html.jsãcss / style.css.js ãscript.jsãªã©ããã¡ã€ã«ã®å 容ã¯ããã©ã«ãã§ãšã¯ã¹ããŒããããŸãã
// index.html.js
export default `
<!DOCTYPE html>
<html
lang="en"
dir="ltr"
itemscope
itemtype="https://schema.org/WebPage"
prefix="og: http://ogp.me/ns#"
>
...
</html>
`
ãã®ã¢ãããŒãã§ã¯ããã¹ãŠã®ç»åïŒãã®å Žåã¯ã¢ã€ã³ã³ïŒãBase64ã§ãšã³ã³ãŒãããå¿ èŠãããããšã«æ³šæããŠãã ããããããé©åãªãªã³ã©ã€ã³ããŒã«ã®1ã€ã§ãã倿ããããã¡ã€ã«ã®å é ã«ãdataïŒimage / png; base64ããšããè¡ãååšããããšã¯ãåºæ¬çã«éèŠã§ã¯ãããŸãããfs-extra
ã䜿çšããŠãã¡ã€ã«ãã³ããŒïŒæžã蟌ã¿ïŒããŸãããã®ã©ã€ãã©ãªã®outputFileã¡ãœããã¯ãçµã¿èŸŒã¿ã®Node.js writeFileã¡ãœãããšåãããšãè¡ããŸããããã¡ã€ã«ãååšããªãå Žåã¯ãæžã蟌ãŸãããã¡ã€ã«ã®ãã£ã¬ã¯ããªãäœæããŸããããšãã°ãcreate css / style.cssãæå®ããcssãã£ã¬ã¯ããªãååšããªãå ŽåãoutputFileã¯ãã¡ã€ã«ãäœæããŸããããã«style.cssãæžã蟌ã¿ãŸãïŒãã£ã¬ã¯ããªããªãå ŽåãwriteFileã¯äŸå€ãã¹ããŒããŸãïŒã extension.tsãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
import * as vscode from 'vscode'
// fs-extra
const fs = require('fs-extra')
const path = require('path')
// , ,
import indexHTML from './components/index.html.js'
import styleCSS from './components/css/style.css.js'
import scriptJS from './components/script.js'
import icon64 from './components/icons/icon64.js'
// ...
export function activate(context: vscode.ExtensionContext) {
console.log('Congratulations, your extension "htmltemplate" is now active!')
let disposable = vscode.commands.registerCommand(
'htmltemplate.create',
() => {
// , html-template
// filename: string TypeScript-,
// , ,
//
const folder = (filename: string) =>
path.join(vscode.workspace.rootPath, `html-template/${filename}`)
//
// files: string[] , files
const files: string[] = [
indexHTML,
styleCSS,
scriptJS,
icon64,
...
]
//
// ,
const fileNames: string[] = [
'index.html',
'css/style.css',
'script.js',
'server.js',
'icons/64x64.png',
...
]
;(async () => {
try {
//
for (let i = 0; i < files.length; i++) {
// outputFile :
// ( ), ( UTF-8)
// png,
// , Base64-:
//
if (fileNames[i].includes('png')) {
await fs.outputFile(folder(fileNames[i]), files[i], 'base64')
// ,
} else {
await fs.outputFile(folder(fileNames[i]), files[i])
}
}
//
return vscode.window.showInformationMessage(
'All files created successfully'
)
} catch {
//
return vscode.window.showErrorMessage('Failed to create files')
}
})()
}
)
context.subscriptions.push(disposable)
}
export function deactivate() {}
TypeScriptãã€ã³ããŒããããã¢ãžã¥ãŒã«ãã¡ã€ã«ã®ã¿ã€ãã®äžè¶³ã«æ³šæãæããªãããã«ããã«ã¯ã次ã®å 容ã§src /global.d.tsãäœæããŸãã
declare module '*'
æ¡åŒµæ©èœããã¹ãããŠã¿ãŸãããããšãã£ã¿ãŒã§éããŸãã
cd htmltemplate code .
ãããã°ãéå§ããŸãïŒF5ïŒãã¿ãŒã²ãããã£ã¬ã¯ããªïŒããšãã°ãtest-dirïŒã«ç§»åããã³ãã³ããã¬ããã§createã³ãã³ããå®è¡ããŸãã
ãã¡ã€ã«ã®äœæãæåããããšã«é¢ããæ å ±ã¡ãã»ãŒãžãåãåããŸãããã£ããŒïŒ
Visual StudioMarketplaceãžã®æ¡åŒµæ©èœã®å ¬é
VSCodeã®æ¡åŒµæ©èœãå ¬éã§ããããã«ããã«ã¯ã次ã®ããšãè¡ãå¿ èŠããããŸãã
- ããŒã±ãããã¬ã€ã¹ã§ã¢ã«ãŠã³ããäœæããŸãïŒçºè¡è ãã£ãŒã«ãã®å€ãèŠããŠãããŠãã ããïŒ
- vsceã©ã€ãã©ãªãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ãã
package.jsonã®ç·šéïŒ
{
"name": "htmltemplate",
"displayName": "HTML Template",
"description": "Modern HTML Starter Template",
"version": "1.0.0",
"publisher": "puslisher-name",
"license": "MIT",
"keywords": [
"html",
"html5",
"css",
"css3",
"javascript",
"js"
],
"icon": "build/128x128.png",
"author": {
"name": "Author Name @githubusername"
},
"repository": {
"type": "git",
"url": "https://github.com/username/dirname"
},
"engines": {
"vscode": "^1.51.0"
},
"categories": [
"Snippets"
],
"activationEvents": [
"onCommand:htmltemplate.create"
],
"main": "./dist/extension.js",
"contributes": {
"commands": [
{
"command": "htmltemplate.create",
"title": "Create Template"
}
]
},
...
}
README.mdãç·šéããŠããŸãã
æ¡åŒµãã£ã¬ã¯ããªã§vscepackageã³ãã³ããå®è¡ããŠãvsixæ¡åŒµãå«ãå ¬éããã±ãŒãžãäœæããŸãã htmltemplate-1.0.0.vsixãã¡ã€ã«ãååŸããŸãã
ããŒã±ãããã¬ã€ã¹æ¡åŒµæ©èœã管çããããã®ããŒãžã§ã[æ°ããæ¡åŒµæ©èœ]ãã¿ã³ãã¯ãªãã¯ãã[Visual StudioCode]ãéžæããŸãã VSIXãã¡ã€ã«ãã¢ãŒãã«ãŠã£ã³ããŠã«è»¢éãŸãã¯ããŒãããŸããæ€èšŒãå®äºããã®ãåŸ ã£ãŠããŸãã
ããŒãžã§ã³çªå·ã®æšªã«ç·è²ã®ãã§ãã¯ããŒã¯ã衚瀺ãããåŸãæ¡åŒµæ©èœãVSCodeã«ã€ã³ã¹ããŒã«ã§ããããã«ãªããŸãã
æ¡åŒµæ©èœãæŽæ°ããã«ã¯ãpackage.jsonã®ããŒãžã§ã³çªå·ã倿ŽããVSIXãã¡ã€ã«ãçæããŠã[ãã®ä»ã®ã¢ã¯ã·ã§ã³]ãã¿ã³ãã¯ãªãã¯ãã[æŽæ°]ãéžæããŠããŒã±ãããã¬ã€ã¹ã«ã¢ããããŒãããå¿ èŠããããŸãã
ã芧ã®ãšãããVSCodeã®æ¡åŒµæ©èœãäœæããŠå ¬éããããšã«ã€ããŠè¶ èªç¶çãªããšã¯äœããããŸãããããã§ãç§ã¯ç§ã®äŒæãåããŸãããã
次ã®ããŒãã§ã¯ãæåã«Herokuãã¬ãŒã ã¯ãŒã¯ïŒoclifïŒã䜿çšããæ¬¡ã«ããã䜿çšããã«ãæ¬æ Œçãªã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸããNode.js-CLIã¯æ¡åŒµæ©èœãšã¯å€§ããç°ãªããèŠèŠåããããªãã·ã§ã³ã§gitãåæåããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããæ©èœããããŸãã
ããªããããªãèªèº«ã®ããã«äœãé¢çœããã®ãèŠã€ããããšãé¡ã£ãŠããŸããæž èŽããããšãããããŸããã