9ウェブ開発のヒントやトリックアウトブルー
22497 ワード
この記事では、最近使用したWeb開発者向けのヒントとコツを集めました.コンテンツが初心者に向けられているにも関わらず、より高度な開発者にとって良いリマインダーになることを願っています.
1 .現在のタイムスタンプを取得する
オープンクローム開発ツール. タブをクリックします. フィルタWSをクリックします. ページを再読み込みすると、名前の列で接続を確認できます. メッセージをクリックします. 今、あなたは3つの列であなたのWebSocketsですべてのコミュニケーションを見るべきです:データ、長さと時間.
コミュニティと共有したい他のウェブ開発のヒントやコツは、コメント欄に追加してください.
1 .現在のタイムスタンプを取得する
これはちょっとの速さですが、特におもしろいことがわかりました.
const ts = + new Date(); // Same as (new Date()).getTime()
console.log(ts);
// 1576178666126
デモ:https://codepen.io/armelpingault/pen/eYmBzEG
によるとdocumentation :
The valueOf()
method returns the primitive value of the specified object. The shorthand notation is prefixing the variable with a plus sign.
そして、場合には正確に何かについてのアラームが必要ですprimitive value :
In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods. There are 7 primitive data types: string, number, bigint, boolean, null, undefined, and symbol.
ロングプレスの検出
私は、ユーザーインタラクションに応じて2つの異なった行動を引き起こすべきボタンを持っています:通常のクリックの上の1つの行動とボタンの上の長いプレスのもう一つの行動
const btn = document.querySelector('button');
let timer;
btn.addEventListener('mousedown', (e) => {
timer = + new Date();
});
btn.addEventListener('mouseup', (e) => {
if (+ new Date() - timer < 500) {
console.log('click');
} else {
console.log('long press');
};
});
デモ:https://codepen.io/armelpingault/pen/rNaLpLE
3 .オブジェクトの配列をソートする
これは古典的です、我々はしばしばオブジェクトの1つの特性の値に従ってオブジェクトの配列をソートする必要があります.
const arr = [
{name: 'Jacques', age: 32},
{name: 'Paul', age: 45},
{name: 'Pierre', age: 20}
];
arr.sort((firstEl, secondEl) => firstEl.age - secondEl.age);
// [{name: 'Pierre', age: 20}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 45}]
// And if you want to sort in descending order:
arr.sort((firstEl, secondEl) => secondEl.age - firstEl.age);
// [{name: 'Paul', age: 45}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 20}]
デモ:https://codepen.io/armelpingault/pen/zYxoBPW
また、sort() 関数は、配列を適切にソートし、コピーを行わない.
コンポーネント間通信
私のJavaScriptのコンポーネントの2つが互いに通信する必要があるとき、私はCustom Event :
const el = document.createElement('div');
const btn = document.querySelector('button');
const event = new CustomEvent('sort', {
detail: {
by: 'name'
}
});
btn.addEventListener('click', () => {
el.dispatchEvent(event);
});
el.addEventListener('sort', (e) => {
console.log('Sort by', e.detail.by);
});
デモ:https://codepen.io/armelpingault/pen/gObLazb
オブジェクトの配列の深さと浅いコピー
このトピックでは、記事全体に値する、あなたはそれをカバーする記事の何千もを見つけるでしょうが、私は私が私の同僚のいずれかと数日前に議論の後、ここで別のリマインダーを置くと思いました.
オブジェクトの配列のコピーを作成する必要があるとき、それは魅力的です
です
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
しかし、これは元のオブジェクトへのリファレンスをコピーし、変更するとarr1
, then arr2
も変更されます.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
arr1[1].c = 9;
console.log(arr2);
// [{a: 1, b: 2}, {c: 9, d: 4}];
デモ:https://codepen.io/armelpingault/pen/OJPbXEy
使用spread operator 配列の浅いコピーを作成するのに役立ちます.これは新しい配列を作成しますが、配列内のオブジェクトへの参照を保持します.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = [...arr1];
arr1.push({e: 5, f: 6});
arr1[0].a = 8;
console.log(arr2);
// [{a: 8, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/GRgNqBg
ご覧の通り、新しい要素をarr1
変化しないarr2
. しかし、私が中でオブジェクトを修正するならばarr1
, それから、我々は内部の変化も見ますarr2
.
もしアレイの深いコピーを作りたいなら、次のようにします.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr[1].d = 6;
console.log(arr1);
// [{a: 1, b: 2}, {c: 3, d: 6}];
console.log(arr2);
// [{a: 1, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/BayQzOK
この場合、私が何を変えてもarr1
, それは何の影響もありませんarr2
.
注意JSON.stringify , オブジェクトインスタンス(マップ、set、弱マップ、弱集合)は、列挙可能なプロパティのみをシリアル化します.
クリップボードにコピーする
これは、私がaの内容をコピーするのに使用する少しの断片です<textarea>
クリップボードに
const textarea = document.querySelector('textarea');
const copy = () => {
textarea.select();
document.execCommand('copy');
alert('Content popied to clipboard!');
};
textarea.addEventListener('click', copy);
デモ:https://codepen.io/armelpingault/pen/jOEVrQw
また、Clipboard API それはクリップボードを操作するためのより多くのオプションを提供しています.しかし、それはまだ実験的な機能とbrowser support is still pretty low .
7 .それらすべてを支配する1つのNPMコマンド
展開コマンドが1つの単純なラインであるプロジェクトの非常に大きいファンです.
最近プロジェクトに取り組んでいる間、私たちは開発環境をスタートさせるために2つのコマンドを必要としていました.サーバーフォルダとクライアントフォルダからの1つです.さて、これらの2つのコマンドをrootフォルダから実行できるコマンドにする必要がありました.
Projects
|
|-- client
| package.json
|
|-- server
| package.json
|
package.json
NPMパッケージのおかげでconcurrently これにより、いくつかのNPMコマンドを同時に実行することができます.
// After installing the npm package
npm install --save-dev concurrently
// You should now see it in your package.json
"devDependencies": {
"concurrently": "^5.0.0"
}
// Then add the "master" command to the root package.json
"scripts": {
"start": "concurrently \"npm start --prefix ./client\" \"npm start --prefix ./server\"",
}
The --prefix
オプションは、あなたの選択のサブフォルダ内の任意のNPMコマンドを実行します.
npm run build --prefix ./client
SVGファイルの最適化
我々は日常的にSVGのアイコンと多くの作業、およびそれらのアイコンは、通常WebデザインエージェンシーまたはクライアントのWebデザイン部門によって提供されます.
それらの多くは実際に作成され、Adobe Illustratorのようなソフトウェアで生成されます.彼らはグラフィックデザインを作成するための素晴らしいツールですが、彼らは残念ながらまた、あなたのエクスポート設定に注意を払っていない場合、あなたのSVGファイルに余分な無駄なマークアップを作成します.
私のSVGファイルを最適化するためにSVG Optimizer , プロジェクトでの統合はとても簡単です.
// Install SVGO globally
npm install -g svgo
// Optimize all SVG file from -f "folder" to -o "folder"
svgo -f assets/src/svg -o assets/dist/svg
前回、私はそれを実行した、私はすべてのファイルのサイズの約〜30 %の平均利得を測定することができました.悪くない!
ChromeでのWebSocketメッセージの検査
この記事の最後のヒントのために、私は再投稿ですan answer I wrote on StackOverflow 私はリアルタイムのWebアプリケーションの開発に取り組んで必要なこと.
const ts = + new Date(); // Same as (new Date()).getTime()
console.log(ts);
// 1576178666126
The valueOf()
method returns the primitive value of the specified object. The shorthand notation is prefixing the variable with a plus sign.
In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods. There are 7 primitive data types: string, number, bigint, boolean, null, undefined, and symbol.
私は、ユーザーインタラクションに応じて2つの異なった行動を引き起こすべきボタンを持っています:通常のクリックの上の1つの行動とボタンの上の長いプレスのもう一つの行動
const btn = document.querySelector('button');
let timer;
btn.addEventListener('mousedown', (e) => {
timer = + new Date();
});
btn.addEventListener('mouseup', (e) => {
if (+ new Date() - timer < 500) {
console.log('click');
} else {
console.log('long press');
};
});
デモ:https://codepen.io/armelpingault/pen/rNaLpLE 3 .オブジェクトの配列をソートする
これは古典的です、我々はしばしばオブジェクトの1つの特性の値に従ってオブジェクトの配列をソートする必要があります.
const arr = [
{name: 'Jacques', age: 32},
{name: 'Paul', age: 45},
{name: 'Pierre', age: 20}
];
arr.sort((firstEl, secondEl) => firstEl.age - secondEl.age);
// [{name: 'Pierre', age: 20}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 45}]
// And if you want to sort in descending order:
arr.sort((firstEl, secondEl) => secondEl.age - firstEl.age);
// [{name: 'Paul', age: 45}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 20}]
デモ:https://codepen.io/armelpingault/pen/zYxoBPW
また、sort() 関数は、配列を適切にソートし、コピーを行わない.
コンポーネント間通信
私のJavaScriptのコンポーネントの2つが互いに通信する必要があるとき、私はCustom Event :
const el = document.createElement('div');
const btn = document.querySelector('button');
const event = new CustomEvent('sort', {
detail: {
by: 'name'
}
});
btn.addEventListener('click', () => {
el.dispatchEvent(event);
});
el.addEventListener('sort', (e) => {
console.log('Sort by', e.detail.by);
});
デモ:https://codepen.io/armelpingault/pen/gObLazb
オブジェクトの配列の深さと浅いコピー
このトピックでは、記事全体に値する、あなたはそれをカバーする記事の何千もを見つけるでしょうが、私は私が私の同僚のいずれかと数日前に議論の後、ここで別のリマインダーを置くと思いました.
オブジェクトの配列のコピーを作成する必要があるとき、それは魅力的です
です
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
しかし、これは元のオブジェクトへのリファレンスをコピーし、変更するとarr1
, then arr2
も変更されます.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
arr1[1].c = 9;
console.log(arr2);
// [{a: 1, b: 2}, {c: 9, d: 4}];
デモ:https://codepen.io/armelpingault/pen/OJPbXEy
使用spread operator 配列の浅いコピーを作成するのに役立ちます.これは新しい配列を作成しますが、配列内のオブジェクトへの参照を保持します.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = [...arr1];
arr1.push({e: 5, f: 6});
arr1[0].a = 8;
console.log(arr2);
// [{a: 8, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/GRgNqBg
ご覧の通り、新しい要素をarr1
変化しないarr2
. しかし、私が中でオブジェクトを修正するならばarr1
, それから、我々は内部の変化も見ますarr2
.
もしアレイの深いコピーを作りたいなら、次のようにします.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr[1].d = 6;
console.log(arr1);
// [{a: 1, b: 2}, {c: 3, d: 6}];
console.log(arr2);
// [{a: 1, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/BayQzOK
この場合、私が何を変えてもarr1
, それは何の影響もありませんarr2
.
注意JSON.stringify , オブジェクトインスタンス(マップ、set、弱マップ、弱集合)は、列挙可能なプロパティのみをシリアル化します.
クリップボードにコピーする
これは、私がaの内容をコピーするのに使用する少しの断片です<textarea>
クリップボードに
const textarea = document.querySelector('textarea');
const copy = () => {
textarea.select();
document.execCommand('copy');
alert('Content popied to clipboard!');
};
textarea.addEventListener('click', copy);
デモ:https://codepen.io/armelpingault/pen/jOEVrQw
また、Clipboard API それはクリップボードを操作するためのより多くのオプションを提供しています.しかし、それはまだ実験的な機能とbrowser support is still pretty low .
7 .それらすべてを支配する1つのNPMコマンド
展開コマンドが1つの単純なラインであるプロジェクトの非常に大きいファンです.
最近プロジェクトに取り組んでいる間、私たちは開発環境をスタートさせるために2つのコマンドを必要としていました.サーバーフォルダとクライアントフォルダからの1つです.さて、これらの2つのコマンドをrootフォルダから実行できるコマンドにする必要がありました.
Projects
|
|-- client
| package.json
|
|-- server
| package.json
|
package.json
NPMパッケージのおかげでconcurrently これにより、いくつかのNPMコマンドを同時に実行することができます.
// After installing the npm package
npm install --save-dev concurrently
// You should now see it in your package.json
"devDependencies": {
"concurrently": "^5.0.0"
}
// Then add the "master" command to the root package.json
"scripts": {
"start": "concurrently \"npm start --prefix ./client\" \"npm start --prefix ./server\"",
}
The --prefix
オプションは、あなたの選択のサブフォルダ内の任意のNPMコマンドを実行します.
npm run build --prefix ./client
SVGファイルの最適化
我々は日常的にSVGのアイコンと多くの作業、およびそれらのアイコンは、通常WebデザインエージェンシーまたはクライアントのWebデザイン部門によって提供されます.
それらの多くは実際に作成され、Adobe Illustratorのようなソフトウェアで生成されます.彼らはグラフィックデザインを作成するための素晴らしいツールですが、彼らは残念ながらまた、あなたのエクスポート設定に注意を払っていない場合、あなたのSVGファイルに余分な無駄なマークアップを作成します.
私のSVGファイルを最適化するためにSVG Optimizer , プロジェクトでの統合はとても簡単です.
// Install SVGO globally
npm install -g svgo
// Optimize all SVG file from -f "folder" to -o "folder"
svgo -f assets/src/svg -o assets/dist/svg
前回、私はそれを実行した、私はすべてのファイルのサイズの約〜30 %の平均利得を測定することができました.悪くない!
ChromeでのWebSocketメッセージの検査
この記事の最後のヒントのために、私は再投稿ですan answer I wrote on StackOverflow 私はリアルタイムのWebアプリケーションの開発に取り組んで必要なこと.
const arr = [
{name: 'Jacques', age: 32},
{name: 'Paul', age: 45},
{name: 'Pierre', age: 20}
];
arr.sort((firstEl, secondEl) => firstEl.age - secondEl.age);
// [{name: 'Pierre', age: 20}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 45}]
// And if you want to sort in descending order:
arr.sort((firstEl, secondEl) => secondEl.age - firstEl.age);
// [{name: 'Paul', age: 45}, {name: 'Jacques', age: 32}, {name: 'Paul', age: 20}]
私のJavaScriptのコンポーネントの2つが互いに通信する必要があるとき、私はCustom Event :
const el = document.createElement('div');
const btn = document.querySelector('button');
const event = new CustomEvent('sort', {
detail: {
by: 'name'
}
});
btn.addEventListener('click', () => {
el.dispatchEvent(event);
});
el.addEventListener('sort', (e) => {
console.log('Sort by', e.detail.by);
});
デモ:https://codepen.io/armelpingault/pen/gObLazb オブジェクトの配列の深さと浅いコピー
このトピックでは、記事全体に値する、あなたはそれをカバーする記事の何千もを見つけるでしょうが、私は私が私の同僚のいずれかと数日前に議論の後、ここで別のリマインダーを置くと思いました.
オブジェクトの配列のコピーを作成する必要があるとき、それは魅力的です
です
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
しかし、これは元のオブジェクトへのリファレンスをコピーし、変更するとarr1
, then arr2
も変更されます.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
arr1[1].c = 9;
console.log(arr2);
// [{a: 1, b: 2}, {c: 9, d: 4}];
デモ:https://codepen.io/armelpingault/pen/OJPbXEy
使用spread operator 配列の浅いコピーを作成するのに役立ちます.これは新しい配列を作成しますが、配列内のオブジェクトへの参照を保持します.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = [...arr1];
arr1.push({e: 5, f: 6});
arr1[0].a = 8;
console.log(arr2);
// [{a: 8, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/GRgNqBg
ご覧の通り、新しい要素をarr1
変化しないarr2
. しかし、私が中でオブジェクトを修正するならばarr1
, それから、我々は内部の変化も見ますarr2
.
もしアレイの深いコピーを作りたいなら、次のようにします.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr[1].d = 6;
console.log(arr1);
// [{a: 1, b: 2}, {c: 3, d: 6}];
console.log(arr2);
// [{a: 1, b: 2}, {c: 3, d: 4}];
デモ:https://codepen.io/armelpingault/pen/BayQzOK
この場合、私が何を変えてもarr1
, それは何の影響もありませんarr2
.
注意JSON.stringify , オブジェクトインスタンス(マップ、set、弱マップ、弱集合)は、列挙可能なプロパティのみをシリアル化します.
クリップボードにコピーする
これは、私がaの内容をコピーするのに使用する少しの断片です<textarea>
クリップボードに
const textarea = document.querySelector('textarea');
const copy = () => {
textarea.select();
document.execCommand('copy');
alert('Content popied to clipboard!');
};
textarea.addEventListener('click', copy);
デモ:https://codepen.io/armelpingault/pen/jOEVrQw
また、Clipboard API それはクリップボードを操作するためのより多くのオプションを提供しています.しかし、それはまだ実験的な機能とbrowser support is still pretty low .
7 .それらすべてを支配する1つのNPMコマンド
展開コマンドが1つの単純なラインであるプロジェクトの非常に大きいファンです.
最近プロジェクトに取り組んでいる間、私たちは開発環境をスタートさせるために2つのコマンドを必要としていました.サーバーフォルダとクライアントフォルダからの1つです.さて、これらの2つのコマンドをrootフォルダから実行できるコマンドにする必要がありました.
Projects
|
|-- client
| package.json
|
|-- server
| package.json
|
package.json
NPMパッケージのおかげでconcurrently これにより、いくつかのNPMコマンドを同時に実行することができます.
// After installing the npm package
npm install --save-dev concurrently
// You should now see it in your package.json
"devDependencies": {
"concurrently": "^5.0.0"
}
// Then add the "master" command to the root package.json
"scripts": {
"start": "concurrently \"npm start --prefix ./client\" \"npm start --prefix ./server\"",
}
The --prefix
オプションは、あなたの選択のサブフォルダ内の任意のNPMコマンドを実行します.
npm run build --prefix ./client
SVGファイルの最適化
我々は日常的にSVGのアイコンと多くの作業、およびそれらのアイコンは、通常WebデザインエージェンシーまたはクライアントのWebデザイン部門によって提供されます.
それらの多くは実際に作成され、Adobe Illustratorのようなソフトウェアで生成されます.彼らはグラフィックデザインを作成するための素晴らしいツールですが、彼らは残念ながらまた、あなたのエクスポート設定に注意を払っていない場合、あなたのSVGファイルに余分な無駄なマークアップを作成します.
私のSVGファイルを最適化するためにSVG Optimizer , プロジェクトでの統合はとても簡単です.
// Install SVGO globally
npm install -g svgo
// Optimize all SVG file from -f "folder" to -o "folder"
svgo -f assets/src/svg -o assets/dist/svg
前回、私はそれを実行した、私はすべてのファイルのサイズの約〜30 %の平均利得を測定することができました.悪くない!
ChromeでのWebSocketメッセージの検査
この記事の最後のヒントのために、私は再投稿ですan answer I wrote on StackOverflow 私はリアルタイムのWebアプリケーションの開発に取り組んで必要なこと.
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = arr1;
arr1[1].c = 9;
console.log(arr2);
// [{a: 1, b: 2}, {c: 9, d: 4}];
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = [...arr1];
arr1.push({e: 5, f: 6});
arr1[0].a = 8;
console.log(arr2);
// [{a: 8, b: 2}, {c: 3, d: 4}];
const arr1 = [{a: 1, b: 2}, {c: 3, d: 4}];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr[1].d = 6;
console.log(arr1);
// [{a: 1, b: 2}, {c: 3, d: 6}];
console.log(arr2);
// [{a: 1, b: 2}, {c: 3, d: 4}];
これは、私がaの内容をコピーするのに使用する少しの断片です
<textarea>
クリップボードにconst textarea = document.querySelector('textarea');
const copy = () => {
textarea.select();
document.execCommand('copy');
alert('Content popied to clipboard!');
};
textarea.addEventListener('click', copy);
デモ:https://codepen.io/armelpingault/pen/jOEVrQw また、Clipboard API それはクリップボードを操作するためのより多くのオプションを提供しています.しかし、それはまだ実験的な機能とbrowser support is still pretty low .
7 .それらすべてを支配する1つのNPMコマンド
展開コマンドが1つの単純なラインであるプロジェクトの非常に大きいファンです.
最近プロジェクトに取り組んでいる間、私たちは開発環境をスタートさせるために2つのコマンドを必要としていました.サーバーフォルダとクライアントフォルダからの1つです.さて、これらの2つのコマンドをrootフォルダから実行できるコマンドにする必要がありました.
Projects
|
|-- client
| package.json
|
|-- server
| package.json
|
package.json
NPMパッケージのおかげでconcurrently これにより、いくつかのNPMコマンドを同時に実行することができます.
// After installing the npm package
npm install --save-dev concurrently
// You should now see it in your package.json
"devDependencies": {
"concurrently": "^5.0.0"
}
// Then add the "master" command to the root package.json
"scripts": {
"start": "concurrently \"npm start --prefix ./client\" \"npm start --prefix ./server\"",
}
The --prefix
オプションは、あなたの選択のサブフォルダ内の任意のNPMコマンドを実行します.
npm run build --prefix ./client
SVGファイルの最適化
我々は日常的にSVGのアイコンと多くの作業、およびそれらのアイコンは、通常WebデザインエージェンシーまたはクライアントのWebデザイン部門によって提供されます.
それらの多くは実際に作成され、Adobe Illustratorのようなソフトウェアで生成されます.彼らはグラフィックデザインを作成するための素晴らしいツールですが、彼らは残念ながらまた、あなたのエクスポート設定に注意を払っていない場合、あなたのSVGファイルに余分な無駄なマークアップを作成します.
私のSVGファイルを最適化するためにSVG Optimizer , プロジェクトでの統合はとても簡単です.
// Install SVGO globally
npm install -g svgo
// Optimize all SVG file from -f "folder" to -o "folder"
svgo -f assets/src/svg -o assets/dist/svg
前回、私はそれを実行した、私はすべてのファイルのサイズの約〜30 %の平均利得を測定することができました.悪くない!
ChromeでのWebSocketメッセージの検査
この記事の最後のヒントのために、私は再投稿ですan answer I wrote on StackOverflow 私はリアルタイムのWebアプリケーションの開発に取り組んで必要なこと.
Projects
|
|-- client
| package.json
|
|-- server
| package.json
|
package.json
// After installing the npm package
npm install --save-dev concurrently
// You should now see it in your package.json
"devDependencies": {
"concurrently": "^5.0.0"
}
// Then add the "master" command to the root package.json
"scripts": {
"start": "concurrently \"npm start --prefix ./client\" \"npm start --prefix ./server\"",
}
npm run build --prefix ./client
我々は日常的にSVGのアイコンと多くの作業、およびそれらのアイコンは、通常WebデザインエージェンシーまたはクライアントのWebデザイン部門によって提供されます.
それらの多くは実際に作成され、Adobe Illustratorのようなソフトウェアで生成されます.彼らはグラフィックデザインを作成するための素晴らしいツールですが、彼らは残念ながらまた、あなたのエクスポート設定に注意を払っていない場合、あなたのSVGファイルに余分な無駄なマークアップを作成します.
私のSVGファイルを最適化するためにSVG Optimizer , プロジェクトでの統合はとても簡単です.
// Install SVGO globally
npm install -g svgo
// Optimize all SVG file from -f "folder" to -o "folder"
svgo -f assets/src/svg -o assets/dist/svg
前回、私はそれを実行した、私はすべてのファイルのサイズの約〜30 %の平均利得を測定することができました.悪くない!ChromeでのWebSocketメッセージの検査
この記事の最後のヒントのために、私は再投稿ですan answer I wrote on StackOverflow 私はリアルタイムのWebアプリケーションの開発に取り組んで必要なこと.
コミュニティと共有したい他のウェブ開発のヒントやコツは、コメント欄に追加してください.
Reference
この問題について(9ウェブ開発のヒントやトリックアウトブルー), 我々は、より多くの情報をここで見つけました https://dev.to/armelpingault/9-web-development-tips-and-tricks-out-of-the-blue-119iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol