Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

升级了2.9.4的vux,能启动项目,还是一直提醒报下面的错。$t" is not defined 升级到最新版本 vux-loader.... #3734

Closed
ihouchunyao opened this issue Oct 21, 2020 · 4 comments
Milestone

Comments

@ihouchunyao
Copy link

vue.runtime.esm.js?2b0e:619 [Vue warn]: Property or method "$t" is not defined on the instance xxxxxxxxx
index.js?366f:3 VUX: 如果你看到这一行,说明 vux-loader 配置有问题或者代码书写规范的原因导致无法解析成按需引入组件,会导致打包体积过大。请升级到最新版本 vux-loader,建议开启 eslint(standard)。

index.vue?6ced:53 [VUX] 抱歉,当前组件[cell]要求更新依赖 vux-loader@latest

升级了2.9.4的vux,能启动项目,还是一直提醒报上面的错。

@flicat
Copy link

flicat commented Nov 2, 2020

这插件还在改 webpack.base.js 里的配置,vue2.6.x都没有这个文件了,配置都放 vue.config.js 里了。而且 vux-loader 还是强制使用?。。。。。。。。。。弃坑换 vant 吧

@flicat
Copy link

flicat commented Nov 7, 2020

vue.runtime.esm.js?2b0e:619 [Vue warn]: Property or method "$t" is not defined on the instance xxxxxxxxx
index.js?366f:3 VUX: 如果你看到这一行,说明 vux-loader 配置有问题或者代码书写规范的原因导致无法解析成按需引入组件,会导致打包体积过大。请升级到最新版本 vux-loader,建议开启 eslint(standard)。

index.vue?6ced:53 [VUX] 抱歉,当前组件[cell]要求更新依赖 vux-loader@latest

升级了2.9.4的vux,能启动项目,还是一直提醒报上面的错。

https://www.cnblogs.com/flicat/p/13940707.html

@snowhat
Copy link

snowhat commented Jan 5, 2021

vue-loader升级到15之后对于模版预处理方式改变,导致原来使用vux-loader1.2.9 不能正确打包
首先需要修改下vux-loader/src/libs/import-parser.js 的bug,在vue-cli3 默认的 babel-loader 处理完传入js-loader 的 source 被修改了(具体是babel-loader 还是其他的loader修改的,目前没有具体分析)
例如:以下源代码
import { DevicePlugin, ToastPlugin, AlertPlugin, ConfirmPlugin, //XHeader, Group, Cell, XButton, } from 'vux';
会被处理成
import { DevicePlugin, ToastPlugin, AlertPlugin, ConfirmPlugin //XHeader, , Group, Cell, XButton, } from 'vux';
这里import-parse 在去除注释的时候会处理错误 去注释变成下边这样

import { DevicePlugin, ToastPlugin, AlertPlugin, ConfirmPlugin r, Group, Cell, XButton, } from 'vux';

修改vux-loader/src/libs/import-parser.js

...
18行附近
做如下修改
source = removeComments(removeCommentLine(source)) // removeComments(removeCommentLine(source)).replace(reg, function (match1, match2, match3) { source.replace(reg, function (match1, match2, match3) {
...
注释掉38行附近的
// source = removeCommentLine(source)
...
164附近找到如下代码
if (mode.lineComment) { if (str[i + 1] === 'n' || str[i + 1] === 'r') {
把 n 和 r 改成 \n 和 \r
改完保存

然后将 vue.config.js 配置如下

`
const path = require('path')
const vuxLoader = path.join(__dirname, './node_modules/vux-loader')
const scriptLoader = path.join(vuxLoader, './src/script-loader.js')
// const styleLoader = path.join(vuxLoader, './src/style-loader.js')
const templateLoader = path.join(vuxLoader, './src/template-loader.js')
const jsLoader = path.join(vuxLoader, './src/js-loader.js')
// const noopLoader = path.join(vuxLoader, './src/noop-loader.js')
// const afterLessLoader = path.join(vuxLoader, './src/after-less-loader.js')
const beforeTemplateCompilerLoader = path.join(vuxLoader, './src/before-template-compiler-loader.js')
const projectRoot = path.join(__dirname, './src');
module.exports = {
// 自定义添加相应的loader
chainWebpack: config => {
// js-loader 必须放到js 规则里 ,而且放到cache-loader 之前,不然不起作用
config.module
.rule('js')
.use('js-loader')
.loader(jsLoader)
.before('cache-loader')
.end()
.end()

        const regexProjectVue = new RegExp(\`${projectRoot}.*?vue$\`)
        const regexProjectJs = new RegExp(\`${projectRoot}.*?js$\`)
        // vux中vue tempalate 配置 template-loader 和 before-template-compiler-loader
        // 对于vux vue 中js代码 增加script-loader
        // 如果没有使用x-icon 可以不加 before-template-compiler-loader  
        config.module
            .rule('vux')
            .test(/[/]node_modules[/]vux(.*)\.vue/)
            .resourceQuery(/type=template/)
                .use('vux-template-loader')
                    .loader(templateLoader)
                .end()
            .end()
            .rule('vux-before-template-loader')
            .resourceQuery(/type=template/)
                .use('vux-before-template-loader')
                    .loader(beforeTemplateCompilerLoader)
                .end()
            .end()
            .rule('vux-script')
            .test(/node_modules.*vux.src.*?vue$/)
            .resourceQuery(/type=script/)
                .use('vux-script-loader')
                    .loader(scriptLoader)
                    .end()
            .end()
        
    }

    configureWebpack: config => {
        // 这里用原来方式merge vux-loader 的配置
        const vuxLoaderObject = require(vuxLoader);
        vuxLoaderObject.merge(config, {
            plugins: ['vux-ui']
        });
        
        // 删除vux-loader merge 在vue-cli3环境下错误增加的配置项
        /*
        {
            test: /\.vue$/,
            loader: 'vux-loader!vue-loader'
        }
        {
            test: /node_modules.*vux.src.*?js$/,
            loader: 'babel-loader'
        }
        */
        const newRules = config.module.rules.filter(function(rule){
            if(rule.loader)  return false
            return true;
        })
        config.module.rules = newRules
    }
}

`

做完这些修改,你的基于vux的项目应该可以完美的跑起来了,而且是按需打包。

@caozhong1996 caozhong1996 added this to the 2.9.5 milestone Jun 7, 2021
@caozhong1996
Copy link
Collaborator

see #3778

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants