私はプロジェクトで npm スクリプトを 6 か月間使用してきました。私は以前から Gulp と Grunt を使用しており、タスクをより効率的にし、多くの面倒なタスクを自動的に処理してくれるのでとても役に立ちました。 しかし、自分のコードではなく、ツールと戦っているように感じるようになりました。
Grunt、Gulp、Broccoli、Brunch およびその他のツールでは、タスクがルールに準拠する必要があり、各ツールを理解するには時間がかかります。コードの複雑さが増すと、これらのツールの処理により多くのエネルギーを費やす必要があります。
これらのビルド ツールが依存するプラグインは、コマンド ライン ツールのレイヤーでラップされており、コア ツールの外側に抽象化レイヤーが追加されています。これは、隠れた危険がある可能性があることも意味します。
私は次の 3 つの問題に何度も遭遇しました
- 必要なプラグインがこのツールで利用できない場合は、非常に不運です (自分でプラグインを作成しない限り)
- 使用しようとしているプラグイン必要なプラグインをラップします。別のツールの古いバージョンを使用すると、機能とドキュメントに一貫性がなくなります。
- エラーは常に適切に処理されるわけではありません。プラグインが間違っている場合、エラーがスローされない可能性があり、デバッグ方法がわからないため、非常に苦労することになります。
しかし、覚えておいてください
私が言いたいのは、現在使用しているビルド ツールに非常に満足しており、望むものを提供できるのであれば、そのまま使用し続けることができます。 npm スクリプトの重要性がますます高まっているからといって、すぐに変える必要があるわけではありません。ツールを学ぶのではなく、プログラムを書くことに重点を置きます。あなたもツールと格闘していると感じているのであれば、npm スクリプトを使ってみることをお勧めします
本当に npm スクリプトを使い始めたい場合は、読み続けてください。多くの例が表示されます。出発点として npm-build-boilerplate を構築しました。はじめましょう!
npm スクリプトを書いています
私たちは全員 package.json ファイルに多くの時間を費やしました。依存関係とスクリプトはすべてここにあります。これは私のボイラープレート プロジェクトの package.json の合理化されたバージョンです
rree
私たちのスクリプトは script の下に記述され、devDependency にはプロジェクトの依存関係が保存されます。始める前に、このプロジェクトの構造を見ていきたいと思います。
プロジェクトの構造
SCSS => CSS
私は SCSS の大ファンなので、SCSS を紹介するのが待ちきれませんあなたへ。このタスクを実行するには、node-sass を使用します。
{ "name": "npm-build-boilerplate", "version": "1.0.0", "scripts": { ... }, "devDependencies": { ... }}
上記のコマンドを使用して、node-sass をインストールすると、package.json の devDependency に表示されるので、他の人がそれを実行したい場合に便利です。コーディングするのがはるかに便利になります。インストールが完了したら、それを使用してみましょう:
npm install --save-dev node-sass
このコマンド行は次のことを行います。 CSS を作成し、それを dist/css の下に置きます。ちなみに、私のために圧縮してください
しかし、偉いリーダーは通常、スクリプトに「それを実行してください」と指示します。リーダーは次のスローガンを叫ぶだけで済みます:
node-sass --output-style compressed -o dist/css src/scss
このようにして、大きなリーダー (あなた) は Sass をコンパイルするタスクを完了しました (冗談です)。
次の部分では、上記のように npm スクリプトをいつでも作成できます
scss をコマンドに置き換えるだけです。
ご覧のとおり、多くのコマンド ライン ツールでは、多数のオプションから選択する必要があります。たとえば、以下は、node-sass オプションの構成です:
"scripts": { "scss": "node-sass --output-style compressed -o dist/css src/scss"}
Autoprefix CSS with PostCSS
ここで、Autoprefixer と PostCSS を使用してプレフィックスを自動的に追加し、複数のモジュールをインストールできます。同時に:
npm run scss
PostCSS はデフォルトでは何もせず、Autoprefixer などのプラグインに依存しているため、2 つのモジュールをインストールしました。
ここで、両方のツールを devDependency に追加し、スクリプト オブジェクトに別のタスクを追加します。
"scripts": { "scss": "node-sass --output-style nested --indent-type tab --indent-width 4 -o dist/css src/scss"}
このタスクでは、postcss では autoprefixer を使用して、すべての CSS を dist/css/* の下に置くことができます。ファイルは次のとおりです。
npm install --save-dev postcss-cli autoprefixer
同様に、postcss-cli、autoprefixer にも多くのオプションがあります
JavaScript のリンティング
適切なプログラミング スタイルと標準を維持することが保証されますLint は、eslint を使用できるかどうかを自動的にチェックするのに役立ちます
もう一度、今回はショートカットを使用してパッケージをインストールします:
"scripts": { ... "autoprefixer": "postcss -u autoprefixer -r dist/css/*"}
以下と同じ
"autoprefixer": "postcss -u autoprefixer --autoprefixer.browsers '> 5%, ie 9' -r dist/css/*"
安装完,我们使用 eslint 设置一些执行我们代码的基本规则,执行下面代码进入指引:
eslint --init
我建议你选择”Answer questions about your style” 并且回答它问的问题,这会生成一个新的文件在你的项目根部。
再次丰富 scripts 对象:
"scripts": { ... "lint": "eslint src/js"}
这13个字符的命令会查找在 src/js 下的所有js文件,并根据配置重新执行一遍。另外你会被 这些配置逼疯的。
Uglifying JavaScript files
接下来是合并压缩 JavaScript文件,我们选择 uglify-js来做:
npm i -D uglify-js
然后再次配置 package.json :
"scripts": { ... "uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js"}
值得一提的是 npm scripts 本质上是命令行的别名,这意味着你可以在 scripts 中使用标准命令行代码,这里用到了 mkdir 和 &&
前半部分, mkdir -p dist/js的意思是如果(-p)不存在这样的目录结构,则创建一个新的执行成功之后(&&) 再执行后半部分 uglifyjs src/js/*.js -m -o dist/js/app.js"这部分是告诉 uglifyjs 使用 “mangle” (-m) 命令,应用在 src/js的所有js 上,并产出到 dist/js/app.js。
让我们再丰富下 uglify , 创建一个 compress 版本的 dist/js/app.js(使用 -c )
"scripts": { ... "uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js && uglifyjs src/js/*.js -m -c -o dist/js/app.min.js"}
Compressing Images
接下来看看压缩图片。根据 httparchive.org, 前1000 个热门网站的页面大小是 1.9mb ,而其中图片就占了 1.1mb ,所以页面提速的首要因素是压缩图片体积。
安装 imagemin-cli
npm i -D imagemin-cli
Imagemin 几乎可以压缩所有类型的图片,包括 GIF,JPG,SVG。你可以传递一个文件夹路径,然后它会处理其中的所有图片:
"scripts": { ... "imagemin": "imagemin src/images dist/images -p",}
这个任务是压缩所有在 src/images下的图片,并把结果输出到 dist/images。-p 的意思是 尽量创建 “progressive” 的图片。
SVG Sprites
近几年 SVG 越来越受欢迎,因为它几乎兼容所有设备,可以用 CSS 调整,视觉效果良好。然而很多 SVG 编辑器会残留多余和不必要的代码。我们使用 svgo来移除。
你可以把压缩 SVG 和拼接精灵图放在一块,拼接精灵图我们使用 svg-sprite-generator
npm i -D svgo svg-sprite-generator
现在你应该很熟悉这种模式了吧。
"scripts": { ... "icons": "svgo -f src/images/icons && mkdir -p dist/images && svg-sprite-generate -d src/images/icons -o dist/images/icons.svg"}
icons 这个任务做了三件事,传递了一个文件夹路径(-f)给 svgo, 然后如果没有(-p) dist/images这个文件夹则创建一个,接着就拼接精灵图,结果保存到(-d) src/images/icons, 产出(-o)叫做 dist/images/icons.svg
Serve and Automatically Inject Changes with BrowserSync
最后一个问题是 BrowserSync,他可以帮我们做的是:开启一个本地服务器,自动更新文件,自动在浏览器中同步点击,滚动效果。
npm i -D browser-sync
"scripts": { ... "serve": "browser-sync start --server --files 'dist/css/*.css, dist/js/*.js'"}
这个任务打开一个本地服务(—server),以当前路径作为根目录,—files 参数告诉 Browsersync 监听 dist下的所有css 和 js文件,一有更新,马上自动刷新页面。
Grouping tasks
有了上面的代码,我们现在能够:
- 编译 SCSS 并且自动添加前缀
- 检查并压缩 JavaScript
- 压缩图片
- 将一个 SVG 文件夹转成一张 SVG 精灵图
- 创建一个本地服务器,并实时自动刷新浏览器
Combining CSS tasks
我们可以把 CSS 相关的任务合并在一起:
"scripts": { ... "build:css": "npm run scss && npm run autoprefixer"}
当你执行 npm run build:css ,它会在执行 scss 任务成功之后在执行 autoprefixer 。其他任务也类似,我们也可以这样做
"scripts": { ... "build:js": "npm run lint && npm run uglify", "build:images": "npm run imagemin && npm run icons", "build:all": "npm run build:css && npm run build:js && npm run build:images"}
Watching for changes
我们现在还需要监听文件的变动,并自动执行相应的任务,我推荐使用 onchange,安装:
npm i -D onchange
添加任务:
"scripts": { ... "watch:css": "onchange 'src/scss/*.scss' -- npm run build:css", "watch:js": "onchange 'src/js/*.js' -- npm run build:js",}
任务是给 onchange 传递一个需要监听的文件路径,我们需要 onchange 自动执行的命令则放在 — 后面。
Let’s add one more watch command to finish off our npm scripts build process.
安装多一个 package, parallelshell
npm i -D parallelshell
再一次,添加新的任务到 scripts 对象上:
"scripts": { ... "watch:all": "parallelshell 'npm run serve' 'npm run watch:css' 'npm run watch:js'"}
parallelshell 允许我们同时执行多个任务,为什么不使用 && 呢?
因为 && 的执行顺序必须是前面的执行完了才轮到后面的任务,但是 watch 类型的任务永远不会完成啊~
现在 watch:all 任务开启服务器,并监听代码,一旦有变动,马上刷新浏览器 perfect!
Other useful tasks
npm 有很多 其他任务。我们再写一个总的启动任务:
"scripts": { ... "postinstall": "npm run watch:all"}
npm install 之后就执行一下 postinstall 吧,这在团队开发中是很好的体验,克隆你代码的人执行 npm install 然后 马上 watch: all
Wrap Up
噢,我们做到了(终于翻译完了,好长的文章。。。),希望看完这篇文章你能学会使用 npm scripts
对了,我把代码都放在 npm-build-boilerplate上了,欢迎交流。
译者的废话
最近看到关于 npm scripts 的字眼比较多,然后就找了篇文章翻译。
- 使用gulp生成sprites图片和样式表
- Gulp新手入门教程
- 我为何放弃Gulp与Grunt,转投npm scripts(上)

強力な機能と優れたユーザーエクスペリエンスを備えたWebサイトを構築するには、HTMLだけでは十分ではありません。次のテクノロジーも必要です。JavaScriptは、Webページに動的とインタラクティブ性を与え、リアルタイムの変更がDOMを操作することで達成されます。 CSSは、美学とユーザーエクスペリエンスを向上させるために、Webページのスタイルとレイアウトを担当しています。 React、Vue.JS、Angularなどの最新のフレームワークとライブラリは、開発効率とコード組織構造を改善します。

ブール属性は、値なしでアクティブ化されるHTMLの特別な属性です。 1.ブール属性は、無効化された入力ボックスを無効にするなど、存在するかどうかによって、要素の動作を制御します。 2.彼らの実用的な原則は、ブラウザが異なっているときに属性の存在に応じて要素の動作を変更することです。 3.基本的な使用法は、属性を直接追加することであり、高度な使用法はJavaScriptを介して動的に制御できます。 4.一般的な間違いは、値を設定する必要があると誤って考えており、正しい執筆方法は簡潔にする必要があります。 5.ベストプラクティスは、コードを簡潔に保ち、ブールのプロパティを合理的に使用して、Webページのパフォーマンスとユーザーエクスペリエンスを最適化することです。

HTMLコードは、オンラインバリデーター、統合ツール、自動化されたプロセスを使用するとクリーンになります。 1)w3cmarkupvalidationserviceを使用して、HTMLコードをオンラインで確認します。 2)リアルタイム検証のためにVisualStudiocodeにhtmlhint拡張機能をインストールして構成します。 3)HTMLTIDYを使用して、建設プロセスでHTMLファイルを自動的に検証およびクリーニングします。

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









