gulpfile.jsの落とし穴 - インジェクション (gulp-inject,gulp-wiredep)
今日、私はピットに遭遇し、長い間私を突き刺し、もともと帝国の呼吸は難しいですが、またそのような場所に、本当に耐えられない、敗者プログラムの猿は突然死を誘発しやすい、リスクの高い職業を言ったことは不思議ではない、私は私の人生は糸でぶら下がって作る要因を言う次。
<スパン まず、私は初心者、ルーキー、負け犬、唾を吐くことを歓迎します。
落とし穴1:ファイルインジェクション
ガルプインジェクト
プラグインの説明: css と WebComponent のインジェクションプラグイン、つまり index.html ファイルへのインジェクション(公式説明)
個人的な理解:このプラグインを使用すると、すべてのCSSとjsをindex.htmlページに追加でき、手動で追加する必要はありません。
<スパン
<ブロッククオート <script src=". /bower_components/jquery/dist/jquery.js"></script><link src="css/index.css"/> <ブロッククオート
gulpの世界では、こんな風に手で書かなくてもいいんです、コピペすればいい、早いって言う人もいます、100個くらいコピーして順番に名前をつけて、後でメンテナンスしなきゃいけない、ずっと変えなきゃいけない、考えてみてください、10代です。私の構造ディレクトリはこんな感じです。
<スパン
<ブロッククオート ガルパデモ| bower_components
| ディスト
|スタイル
|script
| 画像
-- index.html
| node_modules
| src
| アプリ
| アセット
| コモン
| 少ない
-- index.html
-- bower.json
-- gulpfile.js
-- package.json <ブロッククオート プロジェクトでは、このように書きました。
<スパン
var inject = require('gulp-inject');
// inject injects
gulp.task('index', function() {
gulp.src('. /dist/index.html') // get the data for that file
.pipe(inject(gulp.src(['. /dist/scripts/app.js'], { // let the fetched stream be injected once: inject the specified file into the stream file (i.e. write the externally linked code from app.js to index.html)
read: false // don't worry about the meaning for now
}), relative: true // don't worry about it for now
})
.pipe(gulp.dest('. /dist')); // stream the manipulated file to the dist folder
})
アクションを直接gulpタスクにすれば動作します。 --> dist -->index.html を開くと、もちろん中に余分なものが入っています。 大前提として、「このような場合に備えて、このような場合にも対応できるような
<! -- inject:js -->
<! -- endinject --></span>
<スパン <スパン <スパン これは、ページがインジェクト・データ・ストリームをどこに置けばいいのか分からないときに起こる現象です。
<!DOCTYPE html>
<html lang="en" ng-app="failfairy">
<head>
<meta charset="UTF-8">
<title>gulp test</title>
<meta name="description" content="">
<meta name="viewport" content="initial-scale=1, maximum-scale=1" />
</head>
<body>
<! -- inject:js -->
<script src="scripts/app.js"></script>
<! -- endinject -->
</body>
</html>
<スパン
見やすくするために、別のプラグインで
<スパン
落とし穴2:ローカルサービスの構築
ブラウザシンク
以前は、ネイティブnodeでビルドするのが苦痛ということしか知りませんでしたが、その後
ブラウザシンク
このプラグインは素晴らしいです、それはそれ以上のことをしますが、私はちょうどそれが私にサービスを構築するために必要です。
<スパン
公式サイトには、詳しい説明があります。
http://www.browsersync.cn
私が使っている機能 このプラグインは、グローバルディレクトリを持つローカルサーバを作成します。
localhost:gulpDemo caojf$ です。
グローバルに、アクセスする場合は、ブラウザのアドレスバーに入力します。
ローカルホスト:3000/dist
var browserSync = require('browser-sync').create(); // Static server
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: ". /" //This is the point of the pitfall, I was setting . /dist later found that the injected plug-in reported a 404 error, remember that ah, must not be the same as me two
}
});
});
<スパン
<スパン
<スパン
<スパン
<スパン
そして、もう少しだけ
<スパン
bower_components
フォルダ内のコンポーネントをインジェクションするということは、このように解釈すべきではありません。
インジェクト
私も以前、このような失敗をしたことがありますが、時間の無駄ですし、スマートではありません。
インターネット上では、bowerがいかに素晴らしいかについて語られていますが、基本的に、どのプラグインを利用して
index.html
ファイルを作成します。
落とし穴3:bowerでインジェクトされた特定のプラグイン
ワイデップ
<スパン
公式の説明です。
<スパン
Bowerの依存関係をあなたのソースコードに配線します。
<スパン
私の理解では bower.jsonにある全てのサインイン済みプラグインを指定されたファイル(index.html)に注入します。
var wiredep = require('wiredep').stream;
gulp.task('bower', function () {
gulp.src('. /src/index.html')
.pipe(wiredep({
optional: 'configuration',
goes: 'here'
}))
.pipe(gulp.dest('. /dist'));
});
<スパン
<スパン
<スパン
<スパン
を実行した結果、このようなものが生成されます。
<!DOCTYPE html>
<html lang="en" ng-app="failfairy">
<head>
<meta charset="UTF-8">
<title>gulp test</title>
<meta name="description" content="">
<meta name="viewport" content="initial-scale=1, maximum-scale=1" />
<! -- bower:js -->
<script src=". /bower_components/jquery/dist/jquery.js"></script>
<script src=". /bower_components/angular/angular.js"></script>
<script src=". /bower_components/bootstrap/dist/js/bootstrap.js">
<! -- endbower -->
</head>
<body>
<! -- inject:js -->
<script src="scripts/app.js"></script>
<! -- endinject -->
</body>
</html>
<スパン
<スパン
<スパン
<スパン
見やすいようにまとめてみました:お楽しみに
<スパン <スパン <スパン <スパン <スパン
<!DOCTYPE html>
<html lang="en" ng-app="failfairy">
<head>
<meta charset="UTF-8">
<title>gulp test</title>
<meta name="description" content="">
<meta name="viewport" content="initial-scale=1, maximum-scale=1" />
<! -- bower:js -->
<script src=". /bower_components/jquery/dist/jquery.js"></script>
<script src=". /bower_components/angular/angular.js"></script>
<script src=". /bower_components/bootstrap/dist/js/bootstrap.js"></script>
<! -- endbower -->
</head>
<body>
<! -- inject:js -->
<script src="scripts/app.js"></script>
<! -- endinject -->
</body>
</html>
// *****************************
// gulpfile.js
// *****************************
var gulp = require('gulp'),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload');
connect = require('gulp-connect');
browserSync = require('browser-sync').create();
inject = require('gulp-inject');
wiredep = require('wiredep').stream;
// style
gulp.task('styles', function() {
return gulp.src('src/**/app.scss')
.pipe(sass('src/**/app.scss', {
style: 'expanded'
}))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('dist/styles'))
.pipe(rename({
suffix: '.min'
}))
.pipe(minifycss())
.pipe(gulp.dest('dist/styles'))
.pipe(notify({
message: 'Styles task complete'
}));
});
// Script
gulp.task('scripts', function() {
return gulp.src('. /src/**/app.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('app.js'))
.pipe(gulp.dest('. /dist/scripts'))
.pipe(rename({
suffix: '.min'
}))
.pipe(uglify())
.pipe(gulp.dest('. /dist/scripts'))
.pipe(notify({
message: 'Scripts task complete'
}));
});
// Images
gulp.task('images', function() {
return gulp.src('src/assets/**/*')
.pipe(cache(imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true
})))
.pipe(gulp.dest('dist/images'))
.pipe(notify({
message: 'Images task complete'
}));
});
// Static server
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: ". /"
}
});
});
// Clean up
gulp.task('clean', function() {
return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {
read: false
})
.pipe(clean());
});
// inject
gulp.task('index', function() {
gulp.src('. /dist/index.html')
.pipe(inject(gulp.src(['. /dist/scripts/app.js'], {
read: false
}), {
relative: true
}))
.pipe(gulp.dest('. /dist'));
});
// injection of the bower element '. /bower_components/angular/*.js',
gulp.task('bower', function () {
gulp.src('. /src/index.html')
.pipe(wiredep({
optional: 'configuration',
goes: 'here'
}))
.pipe(gulp.dest('. /dist'));
});
// Prepare for running
gulp.task('startFun', ['bower', 'styles', 'scripts', 'images'], function() {
gulp.start('index');
});
// add an injection
gulp.task('startInject', ['startFun'], function() {
gulp.start('browser-sync');
});
// Run the project and start the service
gulp.task('default', ['clean'], function() {
gulp.start('startInject');
});
<! -- inject:js -->
<script src="scripts/app.js"></script>
<! -- endinject -->
</body>
</html>
<スパン <スパン <スパン <スパン
// *****************************
// gulpfile.js
// *****************************
var gulp = require('gulp'),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload');
connect = require('gulp-connect');
browserSync = require('browser-sync').create();
inject = require('gulp-inject');
wiredep = require('wiredep').stream;
// style
gulp.task('styles', function() {
return gulp.src('src/**/app.scss')
.pipe(sass('src/**/app.scss', {
style: 'expanded'
}))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('dist/styles'))
.pipe(rename({
suffix: '.min'
}))
.pipe(minifycss())
.pipe(gulp.dest('dist/styles'))
.pipe(notify({
message: 'Styles task complete'
}));
});
// Script
gulp.task('scripts', function() {
return gulp.src('. /src/**/app.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('app.js'))
.pipe(gulp.dest('. /dist/scripts'))
.pipe(rename({
suffix: '.min'
}))
.pipe(uglify())
.pipe(gulp.dest('. /dist/scripts'))
.pipe(notify({
message: 'Scripts task complete'
}));
});
// Images
gulp.task('images', function() {
return gulp.src('src/assets/**/*')
.pipe(cache(imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true
})))
.pipe(gulp.dest('dist/images'))
.pipe(notify({
message: 'Images task complete'
}));
});
// Static server
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: ". /"
}
});
});
// Clean up
gulp.task('clean', function() {
return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {
read: false
})
.pipe(clean());
});
// inject
gulp.task('index', function() {
gulp.src('. /dist/index.html')
.pipe(inject(gulp.src(['. /dist/scripts/app.js'], {
read: false
}), {
relative: true
}))
.pipe(gulp.dest('. /dist'));
});
// injection of the bower element '. /bower_components/angular/*.js',
gulp.task('bower', function () {
gulp.src('. /src/index.html')
.pipe(wiredep({
optional: 'configuration',
goes: 'here'
}))
.pipe(gulp.dest('. /dist'));
});
// Prepare for running
gulp.task('startFun', ['bower', 'styles', 'scripts', 'images'], function() {
gulp.start('index');
});
// add an injection
gulp.task('startInject', ['startFun'], function() {
gulp.start('browser-sync');
});
// Run the project and start the service
gulp.task('default', ['clean'], function() {
gulp.start('startInject');
});
<スパン
<スパン
<スパン
<スパン
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例