1.自己配置了一个webpack,打包后发现里边部分代码还存在注释,顿感不妙

废话不多说 解决如下:

npm install terser-webpack-plugin --save-dev

然后在webpack.config.js文件中进行配置

const TerserWebpackPlugin = require('terser-webpack-plugin');
// 实例化TerserWebpackPlugin对象
const terserPlugin = new TerserWebpackPlugin({
parallel: 4,
extractComments: true,
terserOptions: {
compress: {
warnings: false,
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log'] //移除console
}
}
}); module.exports = {
optimization: {
minimizer: [
// 只有打包环境为production时才能生效
terserPlugin
],
},
}

开开心心运行 npm run build

啪啪啪打脸,报错了,报错信息如下:

const hooks = compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation);
TypeError: Cannot read property 'javascript' of undefined

解决问题:由于terser-webpack-plugin@5与webpack @ 4不兼容,所以运行npm uninstall terser-webpack-plugin

然后运行 试一把~~~~

 npm install terser-webpack-plugin@4.2.3 --save-dev

打包成功了 为啥还有注释????

啪啪啪又打脸了????!!!!

好了,最终发现原因,因为生产环境配置了devtool: 'cheap-module-eval-source-map'导致代码被转成了字符串,所以无法删除注释

最终解决方案如下: 打包时候注释掉 webpack.config.js里的

devtool: 'cheap-module-eval-source-map', //开发环境下使用

保存代码 ,重新打包~ 完美~~

完整版的webpack.config.js配置,打包时候记得注释掉那个map插件,然后publicPath根据需要设置,其实注释掉不要也可以的

// 如果有額外的.babelrc配置的話就可以使用這段代碼1
// module.exports = {
// module: {
// rules: [
// {
// test:/\.jsx?$/,
// use: ['babel-loader'],
// exclude:/node_modules/ //排除 node_modules目錄
// }
// ]
// }
// }
// 如果有額外的.babelrc配置的話就可以使用這段代碼2
// 在webpack中配置 babel,如果沒有額外的.babelrc配置的話就可以使用這段代碼1
//webpack.config.js
// 首先引入插件1
// 导入terser-webpack-plugin-->减少js体积(其中删除js的console.log和注释)
const TerserWebpackPlugin = require('terser-webpack-plugin')
// 实例化TerserWebpackPlugin对象
const terserPlugin = new TerserWebpackPlugin({
parallel: 4,
extractComments: true,
terserOptions: {
compress: {
warnings: false,
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log'], //移除console
},
},
})
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const isDev = process.env.NODE_ENV.trim() === 'development' //html-webpack-plugin 的 config 的妙用4-1
const { CleanWebpackPlugin } = require('clean-webpack-plugin') //清理dist目錄的插件
const path = require('path') //設置出口使用
const config = require('./public/config')[isDev ? 'dev' : 'build'] //html-webpack-plugin 的 config 的妙用4-2
module.exports = {
entry: './src/index.js', //webpack的默認配置,也可以寫一個數組
output: {
path: path.resolve(__dirname, 'dist'), //必須是絕對路徑
// filename: 'bundle.js',
// filename: 'bundle.[hash].js',
filename: 'bundle.[hash:6].js', //考虑到CDN缓存的问题,我们一般会给文件名加上 hash
// publicPath: '/' // 打包上线之前要改一下这个哦TODU-LIST
},
mode: isDev ? 'development' : 'production', //html-webpack-plugin 的 config 的妙用4-3
module: {
rules: [
{
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [
[
'@babel/plugin-transform-runtime',
{
corejs: 3,
},
],
],
},
},
exclude: /node_modules/,
},
{
//看清楚啦 這裡有四個loaderloader 的执行顺序是从右向左执行的,也就是后面的 loader 先执行,上面 loader 的执行顺序为: less-loader ---> postcss-loader ---> css-loader ---> style-loader
test: /\.(le|c)ss$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
plugins: function () {
return [
require('autoprefixer')({
overrideBrowserslist: ['>0.25%', 'not dead'],
}),
]
},
},
},
'less-loader',
],
exclude: /node_modules/,
},
{
test: /\.(png|jpg|gif|jpeg|webp|svg|eot|gltf|ttf|woff|woff2)$/,
use: [
{
loader: 'url-loader',
// options: {
// limit: 10240, //10K
// esModule: false
// }
// ,
// 使用上面的那一段運行後會把圖片名字改為MD5哈希值,使用下面的會保留原有名稱加上六位哈希值
options: {
limit: 10240, //10K
// publicPath: './src/',
esModule: false,
name: '[name]_[hash:0].[ext]',
outputPath: 'assets', //這個可以將打包後的資源放到指定的文件夾下
},
},
],
exclude: /node_modules/,
},
// {
// test: /\.html$/,
// use: 'html-withimg-loader'
// },
],
},
optimization: {
minimizer: [
// 只有打包环境为production时才能生效
terserPlugin,
],
},
plugins: [
// 數組,放著所有的webpack插件
new HtmlWebpackPlugin({
template: './public/index.html',
filename: 'index.html',
config: config.template, //html-webpack-plugin 的 config 的妙用4-4
minify: {
removeAttributeQuotes: false, //是否刪除屬性的雙引號
collapseWhitespace: false, //是否折疊空白
},
hash: true, //是否加上hash,默認是false
}),
new CleanWebpackPlugin(), //清理dist目錄插件,不需要傳參數,它自己可以找到outPath
// new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns:['**/*','!dll','!dll/**']}) //如果你有需要不刪除dll目錄下的文件的話可以這樣子寫
new CopyWebpackPlugin({
patterns: [
{
from: 'src/assets/',
to: 'assets/',
},
],
}),
],
devServer: {
port: '8080', //默認是8080
quiet: false, //默認不啟動
inline: true, // 默認開啟inline 模式,如果設置為false, 開啟 iframe模式
stats: 'errors-only', //終端僅僅打印 error
overlay: false, //默認不啟用
clientLogLevel: 'silent', //日誌等級
compress: true, //是否啟用gzip壓縮
},
devtool: 'cheap-module-eval-source-map', //开发环境下使用 打包上线之前要改一下这个哦TODU-LIST
} // 在webpack中配置 babel,如果沒有額外的.babelrc配置的話就可以使用這段代碼2

webpack打包后发现有一部分代码还携带注释,如何解决?/webpack打包删除注释以及console.log--快快点进来看一看吧~~的更多相关文章

  1. webpack--性能优化之打包构建速度和代码调试优化

    前言 本文来总结写webpack 在性能方面常见的优化方案. 正文 本文分别总结开发环境和生产环境中在打包构建速度和代码调试功能方面的优化方案,如下: 1.开发环境性能优化 (1)优化打包构建速度 a ...

  2. 全网最贴心webpack系列教程和配套代码

    webpack-demos:全网最贴心 webpack 系列教程和配套代码 欢迎关注个人技术博客:godbmw.com.每周 1 篇原创技术分享!开源教程(webpack.设计模式).面试刷题(偏前端 ...

  3. 彻底解决Webpack打包慢的问题

    转载 这几天写腾讯实习生 Mini 项目的时候用上了 React 全家桶,当然同时引入了 Webpack 作为打包工具.但是开发过程中遇到一个很棘手的问题就是,React 加上 React-Route ...

  4. 解决webpack打包速度慢的解决办法

    技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的.在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种方式最后让很多人崩溃了 ...

  5. webpack优化之玩转代码分割和公共代码提取

    前言 开发多页应用的时候,如果不对webpack打包进行优化,当某个模块被多个入口模块引用时,它就会被打包多次(在最终打包出来的某几个文件里,它们都会有一份相同的代码).当项目业务越来越复杂,打包出来 ...

  6. webpack中css文件的代码分割

    module.exports = { output: { filename: '[name].js', chunkFilename: '[name].chunk.js', path: path.res ...

  7. 解决 webpack 打包文件体积过大

    webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大.下面就来讲下如何从多个方面进行优化. 去除不必要的插件 刚开始用 webpack 的时候,开发环境 ...

  8. 51ak带你看MYSQL5.7源码2:编译现有的代码

    从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...

  9. 解决webpack因新版本打包失败问题--ERROR in multi ./src/main.js ./dist/bundle.js

    最近在学习webpack打包过程中遇到的一个问题向大家分享下! 创建了一个webpacksty的目录,目录下放着dist,src子目录,然后通过node环境下,npm init -y 初始化项目出现p ...

  10. java中异常抛出后代码还会继续执行吗

    今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ i ...

随机推荐

  1. 十四、资源控制器之RS

    RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 .即如果有容器异常退出,会自动创建新的 Pod 来替代:而如果异常多出来的容器也 ...

  2. Docker中数据卷(Volume)的使用

    数据卷有两种形式,一种是容器中的某个目录,它可以被别的容器引用,只要有一个容器引用了这个数据卷,数据就不会被删除:另一种数据卷是将容器中的数据卷和宿主机的目录进行挂载. 数据卷可以在多个容器之间共享, ...

  3. k8s 中的 ingress 使用细节

    k8s中的ingress 什么是ingress Ingress 如何使用 ingress 使用细节 参考 k8s中的ingress 什么是ingress k8s 中使用 Service 为相同业务的 ...

  4. Flask框架:运用Ajax轮询动态绘图

    Ajax是异步JavaScript和XML可用于前后端交互,在之前<Flask 框架:运用Ajax实现数据交互>简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echa ...

  5. Python调用golang

    有些时候因为效率问题部分代码会 使用Python调用go的编译生成动态链接库go 代码示例//add.gopackage main import "C" //export Addf ...

  6. i春秋xss平台

    点开是个普普通通的登录窗口,没有注册,只有登录,抓住包也没获取什么有用的信息,看了看dalao的wp才知道怎么做,首先抓包然后修改参数的定义来让其报错,pass原本的应该为整数,pass[]=就可以让 ...

  7. 关于解决 inittramfs unpacking failed:Decoding failed 报错

    解决办法 vi /etc/initramfs-tools/initramfs.conf 更改COMPRESS=lz4以COMPRESS=gzip 保存更改 sudo update-initramfs ...

  8. Execute Crond Service on openEuler

    一.Execute Crond Service on openEuler 1 crond 概述 crond就是计划任务/定时任务 常见有闹钟.PC端定时关机 shutdown -s -t 200,定时 ...

  9. 生成requirements.txt

    requirements.txt文件 requirements.txt 文件是项目的依赖包及其对应版本号的信息列表,即记载你这个项目所安装的依赖. 作用:用来重新构建项目或者记录项目所需要的运行环境依 ...

  10. org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents

    异常:org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to b ...