前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack打包工具入门

webpack打包工具入门

作者头像
羽翰尘
修改2019-11-26 16:59:12
4870
修改2019-11-26 16:59:12
举报
文章被收录于专栏:技术向技术向

本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/introduce_to_webpack/

简介

webpack 是一个模块打包器。webpack 的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用

快速入门

这里已经介绍得非常详细了,我就不再废话。

在vue项目中使用

如果在已经成型的vue项目中,package.json构建时使用vue-cli-service build,那么我们重新使用webpack打包会有一些坑。(我在试图进行vue ssr时碰到了这个问题)

vue-style-loader不要忘记

在一些教程文章上对vue文件的rules只有vue-loader, 如果vue文件中嵌入了<style>标签,就会报错。

修改vue的rules如下:

代码语言:txt
复制
{
	test: /\.vue$/,
	loader: 'vue-loader!vue-style-loader',
}

.js文件要用babel

代码语言:txt
复制
{
               test: /\.js$/,
               loader: 'babel-loader',
               include: path.join(projectRoot, 'src'),
               exclude: /node_modules/,
               options: {
                   presets: ['@vue/babel-preset-app']
               }
           }

样式文件各不相同

代码语言:txt
复制
{
	test: /\.less$/,
        loader: "style-loader!css-loader!less-loader"
},
{
        test: /\.css$/,
        loader: "style-loader!css-loader"
},
{
         test: /\.scss$/,
         loader: "style-loader!css-loader!sass-loader"
}

其他如图片文件、字体文件配置见完整的配置文件。

一个完整的webpack.config.js如下:

代码语言:txt
复制
const path = require('path');
const projectRoot = path.resolve(__dirname, '.');
const { VueLoaderPlugin } = require('vue-loader')
module.exports = {
    // 此处告知 server bundle 使用 Node 风格导出模块(Node-style exports)
    target: 'node',
    mode:'production',
    entry: path.join(projectRoot, 'src/entry-server.js'),
    output: {
        libraryTarget: 'commonjs2',
        path: path.join(projectRoot, 'dist'),
        filename: 'bundle.server.js',
    },
    module: {
        rules: [{
                test: /\.vue$/,
                loader: 'vue-loader!vue-style-loader',
            },
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: path.join(projectRoot, 'src'),
                exclude: /node_modules/,
                options: {
                    presets: ['@vue/babel-preset-app']
                }
            },
            {
                test: /\.less$/,
                loader: "style-loader!css-loader!less-loader"
            },
            {
                test: /\.css$/,
                loader: "style-loader!css-loader"
            },
            {
                test: /\.scss$/,
                loader: "style-loader!css-loader!sass-loader"
            },
            /*{
                test: /\.styl$/,
                loader: 'style-loader!css-loader!stylus-loader'
            },
            */
            {
                test: /\.(jpg|png)$/,
                loader: 'url-loader'
            },
            {
                test: /\.(eot|svg|ttf|woff|woff2)\w*/,
                loader: 'url-loader'
            },
        ]
    },
    plugins: [
        new VueLoaderPlugin()
    ],
    resolve: {
        extensions: ['.js', '.json', '.css', '.scss','.vue'],//添加在此的后缀所对应的文件可以省略后缀
        alias: {
            'vue$': 'vue/dist/vue.runtime.esm.js',
            '@': path.resolve(path.join(projectRoot, 'src')),
        },
        modules: [
            path.resolve(path.join(projectRoot, 'node_modules')),
            path.resolve(path.join(projectRoot, 'src'))
            ],
    }
}

一些其他问题

  • import 路径问题
代码语言:txt
复制
import api from 'API/index'

vs

代码语言:txt
复制
import api from 'api/index'

api是本地的一个路径,要么用./api引入,要么用API引入

  • import的命名问题
代码语言:txt
复制
import api from 'API/index'

这里的api是说,将API/index导出的所有东西作为apiattributes,可以直接通过api.blabla调用

vs

代码语言:txt
复制
import {api} from 'API/index'

这里的api是值从API/index中引入api, 如果在源文件中没有定义,那么为undefined.

参考:

webpack中文文档 ,讲解详细

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 快速入门
  • 在vue项目中使用
    • vue-style-loader不要忘记
      • .js文件要用babel
        • 样式文件各不相同
        • 一些其他问题
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档