我正在使用Babel 7和Webpack 4进行一个Web项目.我之前从未使用过Babel,也无法真正理解它的某些部分.基于我正在使用的文档,@babel/preset-env
因为它似乎是推荐的方式(特别是对于初学者).还通过我的.browserslistrc
文件使用浏览器列表集成.
Webpack编译好(babel-loader
版本8.0.2
),我没有错误,但我对useBuiltIns: "entry"
这里提到的这个选项以及polyfill
系统如何在Babel中工作感到困惑.
.babelrc.js
module.exports = {
presets: [
['@babel/preset-env', {
"useBuiltIns": "entry" // do I need this?
}]
],
plugins: [
'@babel/plugin-syntax-dynamic-import'
]
};
Run Code Online (Sandbox Code Playgroud)
.browserslistrc
从这里复制(认为合理,因为我的项目使用的是Bootstrap).
>= 1%
last 1 major version
not dead
Chrome >= 45
Firefox >= 38
Edge >= 12
Explorer >= 10
iOS >= 9
Safari >= 9
Android >= 4.4
Opera >= 30
Run Code Online (Sandbox Code Playgroud)
所以我的问题是: …
我对ES6 +相对较新(称为现代JavaScript),但似乎如果要在浏览器中使用它,则需要babel- minify或terser。(首先我以为Babili是另一位玩家,但这只是Babel-Minify 的旧名字)
关于用于浏览器的polyfill,可以使用生产就绪的解决方案,例如@ babel / polyfill或Polyfill.io,通过它们,可以将较小的+更快的代码发送给现代浏览器,因为它们不需要/很少需要polyfill(快速测试浏览器,加载动态所需的polyfill,然后启动我们应用的主脚本)。因此,使用这些现代技术似乎绝对合理。
这是我选择babel-minify
或的困境terser
。
该团队的WebPack 决定开关,以terser
在即将举行的WebPack 5
的巴贝尔队取得了比较表显示terser
在速度上要好得多。
文档说这terser
是uglify-es
以前被广泛使用的一个分支。
这些使我认为我必须选择terser
。
但是另一方面,转换仍然需要Babel(并且Babel可以用于许多有用的东西)。他们在业务很久以前(虽然Babili/babel-minify
是首次发布于2016年8月26日,所以uglify
是老年人)。他们在GitHub上有一个很棒的开发人员社区,可能早已发现并修复了错误。基于这些,我对生产安全输出感到更加信任。但是我还没有找到任何有关babel-minify
over 的专业文章terser
。
问题:
我会选择,terser
因为它看起来很有希望,并且上面已经说明了原因,但是:
babel-minify
用完terser
?我从一个月开始学习Webpack 4。我想做的大多数事情都工作得很好,但是这个importLoaders
选择css-loader
对我来说还是个谜。它的官方文档很差,而且我还没有找到关于它的详细解释。
我的用例与文档中介绍的用例非常接近:
{
test: /\.s?css$/,
use: [
ExtractCssChunks.loader,
{
loader: 'css-loader',
options: {
importLoaders: 2, // 0 => no loaders (default); 1 => postcss-loader; 2 => postcss-loader, sass-loader
import: true, // is true by default, but should I use instead false here???
url: false // let postcss do it
}
},
'postcss-loader',
'sass-loader'
]
}
Run Code Online (Sandbox Code Playgroud)
而我的vendor.scss例如具有不同类型的导入:
@charset 'UTF-8';
// Google fonts
@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700|Dosis:200,400,500,600');
//FontAwesome (from node_modules)
@import "~@fortawesome/fontawesome-svg-core/styles";
// Site theme
@import "theme/index"; …
Run Code Online (Sandbox Code Playgroud) 我有一个 Web 项目,其中使用webpack-dev-server
了启用 HMR的工作 Webpack4 配置,并通过 npm 脚本以这种方式启动:
cross-env NODE_ENV=development webpack-dev-server --inline --hot
一切正常,HMR 适用于我的 js 和 scss 文件。现在我想知道是否可以扩展我的 Webpack 配置以在我修改视图模板文件时在浏览器中完全重新加载。
对我来说似乎不能自己webpack-dev-server
做到这一点,所以我想我需要一些其他的插件。在谷歌搜索了一下之后,这是我得到的:
所以我的问题是,使用 Webpack 4(.17.2) 获得 HMR + watch 给定路径并在文件更改(blade/twig/php/etc...)时重新加载浏览器的最佳方法是什么?
我当前配置的相关部分:
devServer: {
index: '',
open: true,
hotOnly: true,
publicPath: '/build/',
host: 'mysite.test',
proxy: {
'**': {
target: 'http://mysite.test',
changeOrigin: true,
headers: {
'X-Dev-Server-Proxy': 'http://mysite.test'
}
}
}
}
Run Code Online (Sandbox Code Playgroud) webpack ×4
javascript ×3
babel ×1
babeljs ×1
browser-sync ×1
livereload ×1
node.js ×1
sass ×1
uglifyjs ×1