【vue.config】webpack配置项

/**
 * 更多学习 https://webpack.docschina.org/configuration/node/#node
 */

const path = require("path")

module.exports = {
  mode: "development", // 打包环境
  entry: "./main.js", // 打包入口
  devtool: "source-map", // 打包代码初始化
  watch: true, // 启用watch模式,监听文件变化
  watchOptions:{
    aggregateTimeout:300, // 当第一个文件更改,会在重新构建前增加延迟
    ignored: ['node_modules'], // 忽略不需要监听的文件
    poll: 3000, // 设置监听间隔时间
  },
  output: {
    path: path.resolve(__dirname, "dist"), // 打包文件路径
    publicPath: "./", //文件公共路径 
    pathinfo: true, // 去除相关注释信息,生产环境应关闭
    filename: "jquery.js", // 打包文件名
    sourceMapFilename: "[name].map", // map文件名
    sourcePrefix: '', // 修改输出 bundle 中每行的前缀。
    chunkFilename: "jquery.js", // 异步加载文件名
    chunkLoadTimeout: 120000, // 请求过期时间
    crossOriginLoading: false, // 禁止跨域加载 anonymous(不带凭据) use-credentials(带凭据)
    jsonpScriptType: "text/javascript", // script标签 module
    devtoolFallbackModuleFilenameTemplate: "temssms",
    hashDigest: "hex", // hash编码格式
    hashDigestLength: 20, // hash长度
    hashFunction: "md4", // hash 算法
    // hashSalt: "", // 更新哈希 可选的值
    hotUpdateChunkFilename: "[name].[hash].hot-update.js", // 热更新chunk文件名
    hotUpdateMainFilename: "[hash].hot-update.json", // 热更新的主文件名

    // library: "$", // 打包文件,暴露变量
    // 暴露变量,不同环境不同变量
    library: {
      root: "$",
      commonjs: "jquery",
      amd: "jquery"
    },
    libraryTarget: "umd", // 运行环境 this window global commonjs commonjs2 amd amd-require
    umdNamedDefine: true, // 对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define。
    // auxiliaryComment: "Test Comment", // 环境注释
    // 环境注释 不同环境不同注释
    auxiliaryComment: {
      root: "Root Comment",
      commonjs: "CommonJS Comment",
      commonjs2: "CommonJS2 Comment",
      amd: "AMD Comment"
    }
  },
  // 模块
  module: {
    noParse: /jquery|lodash/, // 忽略的文件中不应该含有 import, require, define 的调用
    rules: [{
      test: /\.css$/,
      include: [
        path.resolve(__dirname, 'css/styles')
      ]
    }]
  },
  // 解析
  resolve: {
    // 配置文件别名
    alias: {
      '@': path.resolve(__dirname, './src')
    },
    // 指定字段,按此规范解析。
    aliasFields: ['browser'],
    cacheWithContext: true, // 在配置了 resolve 或 resolveLoader 插件时,解析缓存(resolve caching)中的上下文(context)会被忽略
    // 用于描述的JSon文件
    descriptionFiles: ['package.json'],
    enforceExtension: false, // 如果是true 将不允许无扩展名引入
    enforceModuleExtension: false, // 对模块是否允许扩展名
    extensions: ['.wasm', '.mjs', '.js', '.json'], // 解析文件扩展名
    mainFiles: ['index'], // 解析目录使用的文件名
    modules: ['node_modules'], // 解析模块搜索的目录
    unsafeCache: true, // 缓存模块
    plugins: [], // 插件实例列表
    symlinks: true, // 符号链接资源,将解析为其_真实_路径
    cachePredicate: (module) => {
      return true;
    }, // 决定请求是否应该被缓存的函数。带有 path 和 request 属性的对象
    // 解析 webpack 的 loader 包配置
    // resolveLoader: {
    //   modules: ['node_modules'],
    //   extensions: ['.js', '.json'],
    //   mainFields: ['loader', 'main'],
    //   moduleExtensions: ['-loader'] // 省略example-loader的-loader。
    // }
  },
  // 优化
  optimization: {
    minimize: true, // 压缩开启,生产环境默认开启
    minimizer: [], // 定制压缩工具 会覆盖minimize设置
    splitChunks: {}, // webpack4动态导入模块,分块策略
    runtimeChunk: false, // runtime别名设置
    // namedModules: false, // 读取模块标识符 mode development 启用,在 mode production 禁用
    // namedChunks:false, // 读取chunk标识符 mode development 启用,在 mode production 禁用
    // moduleIds: false, // 选择模块ID时使用哪种算法
    // chunkIds: false, // 选择chunk ID时使用哪种算法
    nodeEnv: 'development', // 大多数情况下取决于mode的选项
    mangleWasmImports: false, // true的情况下将导入修改为更短的字符串,来减少WASM大小.会破坏模块和导出名称。
    removeAvailableModules: false, // 告知webpack从chunk中检测出这些模块,或移除这些模块。
    removeEmptyChunks: false, // 如果chunk为空,告知webpack检测或移除这些chunk。
    mergeDuplicateChunks: false, // 告知webpack合并含有相同模块的chunk。
    flagIncludedChunks: false, // 不再去加载这些chunk子集,默认会在production 模式中启用
    providedExports: false, // 确定模块提供哪些导出以生成更高效的代码export * from ...。
    usedExports: false, //确定每个模块的已使用导出。 在production 模式下启用,否则禁用
    concatenateModules: false, // 告诉webpack查找模块图的各个部分,这些部分可以安全地连接成一个模块。 在production 模式下启用,否则禁用。
    sideEffects: false, // 识别sideEffects标志package.json或规则以跳过模块 在production 模式下启用,否则禁用。
    portableRecords: false //告诉webpack生成具有相对路径的记录,以便能够移动上下文文件夹。
  },
  // 插件实例列表
  // plugin: [
  // new ExtractTextPlugin({
  //   filename: 'build.min.css',
  //   allChunks: true,
  // }),
  // new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
  // // 编译时(compile time)插件
  // new webpack.DefinePlugin({
  //   'process.env.NODE_ENV': '"production"',
  // }),
  // // webpack-dev-server 强化插件
  // new DashboardPlugin(),
  // new webpack.HotModuleReplacementPlugin(),
  // ],
  devServer: {
    // 在服务内部的所有其他中间件之后, 提供执行自定义中间件的功能。
    after: (app, server) => {
      console.log(app, server)
    },
    // 服务内部的所有其他中间件之前, 提供执行自定义中间件的功能。
    before: (app, server) => {
      console.log(app, server)
    },
    // 此选项允许你添加白名单服务,允许一些开发服务器访问。
    allowedHosts: [
      'host.com',
      'subdomain.host.com',
      'subdomain2.host.com',
      'host2.com'
    ],
    bonjour: true, //通过 ZeroConf 网络广播服务
    clientLogLevel: "info", // 会在开发工具(DevTools)的控制台(console)显示消息
    color: true, // 启用/禁用控制台的彩色输出。
    compress: true, // 一切服务都启用 gzip 压缩
    contentBase: false, // 告诉服务器从哪个目录中提供内容。只有在你想要提供静态文件时才需要。
    disableHostCheck: true, // 选项绕过主机检查。不建议这样做,因为不检查主机的应用程序容易受到 DNS 重新连接攻击。
    lazy: true, // 懒加载,只有在请求时再会编译
    filename: 'bundle.js', // 在 lazy mode(惰性模式) 中,此选项可减少编译,使用 filename,可以只在某个文件被请求时编译。
    headers: {}, // 在所有响应中添加首部内容:
    // historyApiFallback: true, // 当使用 HTML5 History API 时,任意的 404 响应都可能需要被替代为 index.html。
    historyApiFallback: {
      // disableDotRule: true, // 当路径中使用点(dot)(常见于 Angular)
      // 比如使用 rewrites 这个选项
      // rewrites: [{
      //     from: /^\/$/,
      //     to: '/views/landing.html'
      //   },
      //   {
      //     from: /^\/subpage/,
      //     to: '/views/subpage.html'
      //   },
      //   {
      //     from: /./,
      //     to: '/views/404.html'
      //   }
      // ]
    },
    host: true, // 启用 webpack 的 模块热替换 功能
    hotOnly: true, // 在没有页面刷新的情况下启用热模块替换(请参阅)作为构建失败时的后备。
    https: true, // dev-server通过HTTP提供服务。也可以选择带有HTTPS的HTTP / 2提供服务:
    // 此对象直接传递到Node.js HTTPS模块
    // https: {
    //   key: fs.readFileSync('/path/to/server.key'),
    //   cert: fs.readFileSync('/path/to/server.crt'),
    //   ca: fs.readFileSync('/path/to/ca.pem'),
    // },
    index: 'index.html', // 被作为索引文件的文件名。
    info: true, // 输出cli信息。默认启用。
    inline: true, // 内联模式(inline mode)
    noInfo: false, // 告诉dev-server隐藏webpack bundle信息之类的消息
    open: false, // 启动服务后是否打开浏览器,默认禁用,可指定对应浏览器
    openPage: '/', // 指定打开浏览器时的导航页面。
    overlay: true, // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层默认禁用如果你想要只显示编译器错误。:
    // 显示警告和错误:
    // overlay:{
    //   warnings: true,
    //   errors: true
    // },
    pfx: '', // 路径是一个.pfx后缀的SSL文件
    pfxPassphrase: '', // SSL PFX文件的密码。
    port: '8080', // 端口号
    // 代理服务
    proxy: {
      // '/api': 'http://localhost:8080', // 指定服务代理
      // 重写代理路径
      // '/api': {
      //   target: 'http://localhost:8080',
      //   pathRewrite: {'^/api' : ''}
      // },
      // 适合Https协议代理
      // '/api': {
      //   target: 'https://other-server.example.com',
      //   secure: false
      // },
      // 函数体,不想代理所以请求的情况,通过请求体,响应体和代理选项来过滤
      // '/api': {
      //   target: 'http://localhost:3000',
      //   bypass: function (req, res, proxyOptions) {
      //     if (req.headers.accept.indexOf('html') !== -1) {
      //       console.log('Skipping proxy for browser request.');
      //       return '/index.html';
      //     }
      //   }
      // },
      // 多个路径指定同个域名
      // proxy: [{
      //   context: ['/auth', '/api'],
      //   target: 'http://localhost:3000',
      // }]
      // 要启用根代理,应该将devServer.index选项指定为falsy值:
      // proxy: {
      //   context: () => true,
      //   target: 'http://localhost:1234'
      // },
      // 主机头的起源保持默认进行代理时覆盖此行为,使用基于名称的虚拟托管站点非常有用。
      // proxy: {
      //   '/api': 'http://localhost:1234',
      //   changeOrigin: true
      // },
    },
    progress: false, // 将运行进度输出到控制台。
    public: 'myapp.test:80', // 内联模式下尝试重连失败下,需要使用这个
    publicPath: '/dist/', // 打包之后文件访问路径,可举例完整的URL来表示访问路径
    quiet: true, // 除了初始启动信息之外的任何内容都不会被打印到控制台
    socket: 'socket', // 用于监听的Unix socket(而不是主机)。
    staticOptions: { // 用于可以对contentBase路径下提供的静态文件,进行高级选项配置。
      redirect: false
    },
    stats: 'errors-only', // 通过此选项,可以精确控制要显示的捆绑信息。如果你想要显示一些打包信息,但又不是显示全部,这可能是一个不错的妥协。选项对话此配置在quiet或noInfo时无效。
    stdin: true, // 此选项在stdin结束时关闭服务。
    useLocalIp: true, // 允许浏览器使用本地IP打开。
    watchContentBase: true, // ContentBase选项下的文件,修改后会触发一次完整的页面重载
    writeToDisk: true, // 告诉devServer将生成的资产写入磁盘。
  },
  // 外部扩展
  externals: {
    jquery: 'jQuery'
  }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值