简体   繁体   English

Vue3 不使用 cli 服务

[英]Vue3 without using the cli service

I am trying to build a vue 3 project without the cli service (which is just a webpack wrapper)我正在尝试构建一个没有 cli 服务的 vue 3 项目(这只是一个 webpack 包装器)

package.json包.json

{
  "name": "test",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "test": "webpack"
  },
  "dependencies": {
    "axios": "^0.24.0",
    "core-js": "^3.6.5",
    "vue": "^3.2.21",
    "vue-loader": "^15.9.8",
    "vue-router": "^4.0.0-0",
    "vue-style-loader": "^4.1.2",
    "vuex": "^4.0.2"
  },
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^4.18.0",
    "@typescript-eslint/parser": "^4.18.0",
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-typescript": "^4.5.15",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/eslint-config-typescript": "^7.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0",
    "typescript": "~4.1.5",
    "webpack": "^4.0.0",
    "node-sass": "^6.0.1",
    "sass-loader": "^10"
  }
}

webpack.config.js webpack.config.js

const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');
// const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    mode: 'development',
    entry: {
        project1: `./src/project1/main.ts`
    },
    output: {
        path: path.resolve(__dirname, './dist'),
        publicPath: '/wwwroot/vue/dist/',
        filename: '[name].js'
    },
    resolve: {
        extensions: ['.tsx','.ts','.mjs','.js','.jsx','.vue','.json','.wasm','.scss','.svg'],
        alias: {
            vue$: 'vue/dist/vue.runtime.esm-bundler.js',
            '@': path.join(__dirname, './src/')
        }
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
            },
            {
                test: /\.ts$/,
                loader: 'ts-loader',
                options: {
                    appendTsSuffixTo: [/\.vue$/]
                }
            },
            {
                test: /\.js$/,
                loader: "babel-loader",
                exclude: /node_modules/
            },
            {
                test: /\.s(c|a)ss$/,
                use: ['vue-style-loader', 'css-loader']
            },
            {
                test: /.css$/,
                use: ['vue-style-loader', 'css-loader',]
            }
        ]
    },
    plugins: [
        new VueLoaderPlugin()
    ]
}

main.ts主文件

import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

App.vue应用程序

<template>
  <div>test</div>
</template>

<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
    name: 'App'
})
</script>

I tried everything I could find online but it keeps giving me the same error (on devtools)我尝试了所有可以在网上找到的东西,但它一直给我同样的错误(在 devtools 上)

Cannot read properties of undefined (reading '_c')无法读取未定义的属性(读取“_c”)
at Proxy.render在 Proxy.render
at renderComponentRoot在 renderComponentRoot
at ReactiveEffect.run在 ReactiveEffect.run
... ...

The reason I want to do it this way (and not using the CLI service) is because I need to build multiple small projects and not just one.我想这样做的原因(而不是使用 CLI 服务)是因为我需要构建多个小项目,而不仅仅是一个。 Also, I don't need all the dist/public folder stuff it generates, I just need to generate one js file for each project which then I can link to a razor page.另外,我不需要它生成的所有 dist/public 文件夹内容,我只需要为每个项目生成一个 js 文件,然后我就可以链接到一个 razor 页面。 If this is possible with the CLI service please let me know.如果 CLI 服务可以做到这一点,请告诉我。

EDIT: This is my folder structure:编辑:这是我的文件夹结构:

wwwroot
 - vue
    - package.json
    - webpack.config.js
    - ts.config.js
    ...
    - src
        - project1
            - main.ts
            - App.vue
            - shims-vue.d.ts
        - project2
            ...
    - dist
        - project1.js
        - project2.js

Well, it turns out I just needed to use the latest version of vue-loader .好吧,事实证明我只需要使用最新版本的vue-loader So change this:所以改变这个:

"vue-loader": "^15.9.8",

to this:对此:

"vue-loader": "^16.8.3",

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM