我的第一个问题是关于如何为简单项目推荐这个开关,只是为了预处理/ Concat / Minify?
理解这个未来的“标准”,比如Webpack和PostCss-NextCss-Autoprefixer等,就像是在迷恋我....
所以这导致了我的下一个问题,是否有任何教程可以指导我在第一个问题中讲述的简单任务?
或者是将我的 gulpfile.js
更改为 webpack-config.js
的简单方法
我在gulp中的正常任务不是最佳实践,但运作良好:
//load plugins
var gulp = require('gulp'),
runSequence = require('run-sequence'),
sass = require('gulp-ruby-sass'),
compass = require('gulp-compass'),
rev = require('gulp-rev'),
revDel = require('rev-del'),
del = require('del'),
minifycss = require('gulp-minify-css'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
plumber = require('gulp-plumber'),
watch = require('gulp-watch'),
path = require('path');
//the title and icon that will be used for the Grunt notifications
var notifyInfo = {
title: 'Gulp',
icon: path.join(__dirname, 'gulp.png')
};
//error notification settings for plumber
var plumberErrorHandler = { errorHandler: notify.onError({
title: notifyInfo.title,
icon: notifyInfo.icon,
message: "Error: <%= error.message %>"
})
};
//patches
var paths = {
scriptsAbs : '_coffeescript/',
stylesAbs: '_scss/',
scriptsCom : '_coffeescript/' + '**/*.js',
stylesCom :'_scss/' + '**/*.scss',
cssCom : 'resources/css',
jsCom : 'resources/js',
imgCom : 'resources/img'
};
gulp.task('clean',
function (cb) {
del([
paths.cssCom + '/*',
paths.jsCom + '/*'
], cb);
});
//styles
gulp.task('styles',
function() {
return gulp.src(paths.stylesCom)
.pipe(plumber(plumberErrorHandler))
.pipe(compass({
sass: '_scss',
css: paths.cssCom,
image: paths.imgCom,
style: 'expanded',
relative: true,
require: ['normalize-scss', 'susy']
}))
.pipe(gulp.dest(paths.cssCom))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest(paths.cssCom))
.pipe(rev())
.pipe(gulp.dest(paths.cssCom))
.pipe(rev.manifest())
.pipe(revDel({ dest: paths.cssCom }))
.pipe(gulp.dest(paths.cssCom))
.pipe(notify({ message: 'Styles task completed' }))
});
//scripts
gulp.task('scripts',
function() {
return gulp.src(paths.scriptsCom)
.pipe(plumber(plumberErrorHandler))
.pipe(concat('main.js'))
.pipe(gulp.dest(paths.jsCom))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest(paths.jsCom))
.pipe(rev())
.pipe(gulp.dest(paths.jsCom))
.pipe(rev.manifest())
.pipe(revDel({ dest: paths.jsCom }))
.pipe(gulp.dest(paths.jsCom))
.pipe(notify({ message: 'Scripts Concatenated completed' }))
// .pipe(reload({stream:true}));
});
gulp.task('default', ['clean','styles','scripts'], function(){
gulp.watch(paths.stylesCom, ['styles'])
gulp.watch(paths.scriptsCom, ['scripts'])
//watch .php files
// gulp.watch(['*.php'], ['bs-reload'])
});
而且我开始使用postcss来制作我的工作流程,mm,更好......有时候更容易 .
你对这一切有什么看法?正确的道路在哪里开始?
EDIT // JUNE 28, 2017
在这一天,我们在Webpack 1上取得的进展非常令人满意并且成功,我们的工作流程要快得多,而且我们对这个工具的依赖性是不可改变的 .
这是我们每天使用的 webpack.config.js
:
"use strict";
var webpack = require('webpack');
var glob = require('glob-all');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var BrowserSyncPlugin = require('browser-sync-webpack-plugin');
let start = {
entry: {
scripts: glob.sync(
[
'./_javascript/*.js',
'./_cssnext/*.pcss'
]
)},
output: {
path: './resources/js',
filename: 'bundle--[name].js'
},
watchOptions: {
poll: true
},
postcss: function (webpack) {
return [
require("postcss-import")({addDependencyTo: webpack}),
require("postcss-url")(),
require("precss")(),
require("postcss-cssnext")(),
require('postcss-font-magician')(),
require("postcss-reporter")(),
require("postcss-browser-reporter")(),
require('postcss-inline-svg')(),
require('postcss-urlrev')(),
require('postcss-fontpath')(),
require('postcss-object-fit-images')()
]
},
module: {
loaders: [
{
test: /\.jsx?$/,
loader: 'babel-loader'
},
{
test: /\.p?css$/,
loader: ExtractTextPlugin.extract(
'style-loader',
'css-loader!postcss-loader'
)
}
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({name: 'scripts', filename: 'bundle--[name].js'}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),
new ExtractTextPlugin("../css/bundle--styles.css"),
new BrowserSyncPlugin({
host: 'localhost',
port: 3000,
proxy: 'localhost:8002',
browser: 'google chrome',
ghostMode: false
})
]
};
module.exports = start;
但是时代已经发生变化,是时候发展到Webpack 3了,现在我们正在将这个_1071475改为版本3
UPDATE 24.07.17 || v1 (Tryout 10000.1)
5 回答
我认为你不需要postcss loader . 我的意思是,暂时 . 你只是从一个工具移动到另一个工具,所以你应该保持尽可能精益 .
请注意,我的代码中的
include
取决于您的配置 . 在那之后我会考虑摆脱你吞下的'relative'路径 . 如果你想维持一个development
和production
环境,它可能会破坏你的东西 . 只是个人经历 .这取决于问题的答案:你认为加载css作为webpack bundle的一部分有没有优势 . 如果您要使用
<link>
将css加载到浏览器,那么webpack可能不会给您带来任何好处 .除了“有一个工具” . 但不是一个配置 - 不要忘记你仍然需要特定的webpack配置,只编译css到speadup开发(编译js非常慢)并且它不是那么容易实现(当你编译时当前的webpack 4有一些副作用只有css) .
好的,由于这个tutroial,我得到了一些很好的成就:
https://www.phase2technology.com/blog/bundle-your-front-end-with-webpack/
我的第一个方法是:
webpack-config.js
这会成功生成一个
bundle--script.js
,但我对css部分有一些问题 .它不会预处理任何东西:/
如果我在此期间开始工作,我会在这里更新,如果有人能指导我,我会非常感激 .
对于简单的项目,我根本不推荐切换 . 最后,我认为这是个人品味,我更喜欢通过易于理解的javascript(gulp)进行后期处理 .
正如你在你的问题中所说,你当前的设置运作良好:那为什么要修复一些没有破坏的东西呢?我专注于重构你的gulp代码,使其更具可读性,将长函数分成更小的gulp任务 .
最后,使用webpack需要学习很多特定的webpack相关配置选项,而gulp你主要只是管道vanilla js命令 .
Gulp和Webpack的概念完全不同:您告诉Gulp如何将前端代码一步一步地放在一起,但是您可以通过配置文件告诉Webpack您想要什么 . 因此,如果要切换,则没有简单的一对一映射 .
在过去的一年里,我们公司从Gulp搬到了Webpack . 我发现理解这两个工具的差异对过渡非常有帮助 . 这是一篇简短的文章(5分钟阅读)我写的解释思维方式的变化:https://medium.com/@Maokai/compile-the-front-end-from-gulp-to-webpack-c45671ad87fe
虽然我们的过渡需要一些时间,但我们想出了如何将我们在Gulp所做的全部工作转移到Webpack . 所以对我们来说,我们在Gulp所做的一切我们也可以通过Webpack完成,但不是相反 .