使用vue-cli脚手架生成的vue项目配置vue.config.js vue-loader不生效?

使用vue-cli脚手架生成的vue项目。没有build文件夹,没法配置webpack.base.conf.js。
通过vue.config.js配置webpack配置configureWebpack vue-loader不生效。希望通过vue-loader的preLoaders用自己写的loader处理html。已安装vue-loader15版本。

webpack的配置项

module.exports = {

lintOnSave: false,
publicPath: BASE_URL,
configureWebpack: (config) => {
    const output = {
        // 把应用打包成 umd 库格式
        library: `${name}`,
        libraryTarget: 'umd',
        jsonpFunction: `webpackJsonp_${name}`,
    };

    
        // 为生产环境修改配置...
        // config.mode = 'development';
        let output2 = {
            ...output,
            devtoolModuleFilenameTemplate: 'webpack://[namespace]/[resource-path]'
        }
        return {
            output: output2,
            module: {
                rules: [{
                    test: /\.less$/,
                    use: [
                        'less-loader',
                        {
                            loader: require.resolve('px2rem-loader'),
                            options: {
                                remUnit: 14, // 这里是因为给的设计图是按照768*1024pad的尺寸来的,因此设置啦这个单位,一般750手机设计图单位设置为75
                            },
                        },
                    ],
                },
                {
                    test: /\.vue$/,
                    loader: 'vue-loader',
                    options: {
                        // `loaders` 覆盖默认 loaders。
                        // 以下配置会导致所有无 `lang` 特性的 `<script>` 标签加载 `coffee-loader`
                        // loaders: {
                        //     js: 'coffee-loader',
                        //     css: ExtractTextPlugin.extract({
                        //         use: 'css-loader',
                        //         fallback: 'vue-style-loader' // <- 这是vue-loader的依赖,所以如果使用npm3,则不需要显式安装
                        //     })
                        // },

                        // `preLoaders` 会在默认 loaders 之前加载。
                        // 你可以用来预处理语言块——一个例子是用来处理构建时的 i18n
                        preLoaders: {
                            // js: '/path/to/custom/loader',
                            html: path.resolve('build/preLoader-makeId.js')
                        },

                        // `postLoaders` 会在默认 loaders 之后加载。
                        //
                        // - 对于 `html`, 默认 loader 返回会编译为 JavaScript 渲染函数
                        //
                        // - 对于 `css`, 由`vue-style-loader` 返回的结果通常不太有用。使用 PostCSS 插件将会是更好的选择。
                        // postLoaders: {
                        //     html: 'babel-loader'
                        // },

                        // `excludedPreLoaders` 应是正则表达式
                        // excludedPreLoaders: /(eslint-loader)/
                    }
                }
                ],
            },
            plugins: [
                new VueLoaderPlugin()
            ]
        };
     return {
        output,
    };
}

阅读 2.3k
1 个回答

path.resolve的路径是不是有问题,path.resolve('build/preLoader-makeId.js')你是不是把loader放在项目根路径的build目录下了,应该配置path.resolve(__dirname, 'build/preLoader-makeId.js'),或者把这个loader放到src目录下,使用相对路径解析,比如放在src/loaders下面,然后配置path.resolve('./loaders/preLoader-makeId.js')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏