项目出现的问题以及webpack配置 | 青训营笔记

109 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

webpack+devServer构建项目404甚至失败

原因:配置开发环境的文件配了publicPath,注意,这个配置项只能在生产环境配置,这个东西的意思是打包后给所有静态资源指定一个前缀地址。

webpack+vue+ts出现报错

在使用SFC(单文件组件的时候),使用lang=ts报错 vue必要的配置配置:vue-loader&vue-template-compiler

webpack必要的配置:webpack&webpack-cli

 {
                    test: /\.ts$/,
                    use: [
                        {
                            loader: "ts-loader",
                        },
                    ],
  },
  报错:export 'render' (imported as 'render') was not found in './App.vue?vue&type=template&id=1ebcac49&ts=true' (module has no exports)

解决方案:webpack处理ts时多一个配置

 test: /\.ts$/,
                    use: [
                        {
                            loader: "ts-loader",
                            //这是必要的
                            options: { appendTsSuffixTo: [/\.vue$/] },
                        },
                    ],

babel如何在webpack+ts中使用

安装@babel/preset-env、@babel/preset-typescript、babel-loader等 在webpack的rules中配置需要使用babel的文件

{
                    test: /\.ts$/,
                    use: [
                        "babel-loader",
                        // {
                        //     loader: "ts-loader",
                        //     options: { appendTsSuffixTo: [/\.vue$/] },
                        // },
                    ],
},

babel.config.json配置(如需polyfill还需在生产环境下安装core-js、regenerator-runtime)

{
    // 先执行插件,从前往后
    "plugins": [],
    // 预设逆序执行
    "presets": [
        [
            "@babel/preset-env",
            {
                // false 不使用任何的polyfill
                //以下的两个值可能会发生冲突(加入第三方库如果实现了关于polyfill相关的东西,你再实现 会有冲突的问题),解决:在babel-loader中加入exclude属性
                // usage 根据源代码需要哪些polyfil就引入相关的api
                // entry只要是浏览器需要的polyfill都引入(不是根据源代码应用哪些polyfill)
                "useBuiltIns": "usage",
                "corejs": "3"
            }
        ],
        ["@babel/preset-typescript"]
    ]
}


注意:babel可以代替ts-loader,只需要配置了@babel/preset-typescript即可 注意:babel-loader(无类型检查,错误依旧可以运行)虽然可以代替ts-loader,但是这样会造成一个影响,即使ts类型报错也可以打包成功。而ts-loader(有类型检查,错误则不能运行)则不会。

解决方案:在执行开发/生产环境的脚本前面,先执行tsc --noEmit,依旧使用babel-loader进行代码转换,一样可以实现类型检查失败报错。

关于postcss在webpack工程化使用的问题

由于vue-loaderv15以上不默认配置postcss,所以我们需要自己配置 开发环境下安装postcss-loader -D包 webpack.config.js中的配置

{
                    test: /\.less$/,
                    use: [
                        "vue-style-loader",
                        "css-loader",
                        "postcss-loader",
                        "less-loader",
                    ],
                },

postcss.config.js的配置(需要npm i -D postcss-preset-env)

module.exports = {
    plugins: [require("postcss-preset-env")],
};