diff --git a/packages/devextreme-cli/src/applications/application.vue.js b/packages/devextreme-cli/src/applications/application.vue.js index 9d02f04fa..96b64cc2c 100644 --- a/packages/devextreme-cli/src/applications/application.vue.js +++ b/packages/devextreme-cli/src/applications/application.vue.js @@ -16,10 +16,9 @@ const defaultStyles = [ const preparePackageJsonForTemplate = (appPath, appName) => { const dependencies = [ - { name: 'sass', version: '^1.34.1' }, + { name: 'sass-embedded', version: '^1.85.1' }, { name: 'vue-router', version: '^3.0.1' }, - { name: 'devextreme-cli', version: latestVersions['devextreme-cli'], dev: true }, - { name: 'sass-loader', version: '^10', dev: true } + { name: 'devextreme-cli', version: latestVersions['devextreme-cli'], dev: true } ]; const nameDepends = dependencies.map(d => d.name); @@ -38,18 +37,14 @@ const preparePackageJsonForTemplate = (appPath, appName) => { }; async function createVueApp(name, depsVersionTag) { - const argList = ['-p', `@vue/cli@${depsVersionTag}`, 'vue', 'create', name, '--registry', 'https://registry.npmjs.org/', '-p "Default (Vue 3)"']; - - return runCommand('npx', argList); + const argList = ['create', `vue${depsVersionTag ? `@${depsVersionTag}` : ''}`, name, '--registry', 'https://registry.npmjs.org/', '--', '--eslint', '--default', '--bare']; + return runCommand('npm', argList); } const bumpVue = (appPath, versionTag) => { const dependencies = [ { name: 'vue', version: versionTag }, { name: 'vue-router', version: versionTag }, - { name: '@vue/cli-plugin-babel', version: versionTag, dev: true }, - { name: '@vue/cli-plugin-eslint', version: versionTag, dev: true }, - { name: '@vue/cli-service', version: versionTag, dev: true }, ]; packageJsonUtils.addDependencies(appPath, dependencies); @@ -78,7 +73,7 @@ const create = async(appName, options) => { }; const modifyIndexHtml = (appPath, appName) => { - const indexHtmlPath = path.join(appPath, 'public', 'index.html'); + const indexHtmlPath = path.join(appPath, 'index.html'); let htmlContent = fs.readFileSync(indexHtmlPath).toString(); htmlContent = htmlContent.replace(/(\w+\s*)+<\/title>/, `<title>${appName}<\/title>`); @@ -175,7 +170,7 @@ const addView = (pageName, options) => { const navigationData = getNavigationData(pageName, componentName, options && options.icon || 'folder'); const getCorrectExtension = (fileExtension) => fileExtension; templateCreator.addPageToApp(pageName, pathToPage, pageTemplatePath, getCorrectExtension); - moduleUtils.insertImport(routingModulePath, `./views/${pageName}`, componentName, true); + moduleUtils.insertImport(routingModulePath, `./views/${pageName}.vue`, componentName, true); insertItemToArray(routingModulePath, navigationData.route); insertItemToArray(navigationModulePath, navigationData.navigation); }; diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/eslint.config.js b/packages/devextreme-cli/src/templates/vue-v3/application/eslint.config.js new file mode 100644 index 000000000..439abde1b --- /dev/null +++ b/packages/devextreme-cli/src/templates/vue-v3/application/eslint.config.js @@ -0,0 +1,32 @@ +import { defineConfig, globalIgnores } from 'eslint/config' +import globals from 'globals' +import js from '@eslint/js' +import pluginVue from 'eslint-plugin-vue' + +export default defineConfig([ + { + name: 'app/files-to-lint', + files: ['**/*.{js,mjs,jsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + { + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, + + js.configs.recommended, + ...pluginVue.configs['flat/essential'], + + { + name: 'disable-unused-vars-in-vue', + files: ['**/*.vue'], + rules: { + 'no-unused-vars': 'off', + }, + }, +]) \ No newline at end of file diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/App.vue b/packages/devextreme-cli/src/templates/vue-v3/application/src/App.vue index acc13f153..be20ee334 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/App.vue +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/App.vue @@ -17,7 +17,7 @@ </template> <script> -import AppFooter from "./components/app-footer"; +import AppFooter from "./components/app-footer.vue"; import { sizes, subscribe, unsubscribe } from "./utils/media-query"; import { getCurrentInstance, diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/components/header-toolbar.vue b/packages/devextreme-cli/src/templates/vue-v3/application/src/components/header-toolbar.vue index 1fe6a7725..759dc8909 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/components/header-toolbar.vue +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/components/header-toolbar.vue @@ -52,7 +52,7 @@ import auth from "../auth"; import { useRouter, useRoute } from 'vue-router'; import { ref } from 'vue'; -import UserPanel from "./user-panel"; +import UserPanel from "./user-panel.vue"; import ThemeSwitcher from './theme-switcher.vue'; export default { diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-inner-toolbar.vue b/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-inner-toolbar.vue index b1a765f35..f7c42f0a4 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-inner-toolbar.vue +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-inner-toolbar.vue @@ -57,8 +57,8 @@ import DxDrawer from "devextreme-vue/drawer"; import DxScrollView from "devextreme-vue/scroll-view"; import DxToolbar, { DxItem } from "devextreme-vue/toolbar"; -import HeaderToolbar from "../components/header-toolbar"; -import SideNavMenu from "../components/side-nav-menu"; +import HeaderToolbar from "../components/header-toolbar.vue"; +import SideNavMenu from "../components/side-nav-menu.vue"; import menuItems from "../app-navigation"; import { ref, watch, computed } from 'vue'; import { useRoute } from 'vue-router'; diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-outer-toolbar.vue b/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-outer-toolbar.vue index e466ecf82..365b39d72 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-outer-toolbar.vue +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/layouts/side-nav-outer-toolbar.vue @@ -39,8 +39,8 @@ import DxDrawer from "devextreme-vue/drawer"; import DxScrollView from "devextreme-vue/scroll-view"; import menuItems from "../app-navigation"; -import HeaderToolbar from "../components/header-toolbar"; -import SideNavMenu from "../components/side-nav-menu"; +import HeaderToolbar from "../components/header-toolbar.vue"; +import SideNavMenu from "../components/side-nav-menu.vue"; import { computed, ref, watch} from 'vue'; import { useRoute } from 'vue-router'; diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/main.js b/packages/devextreme-cli/src/templates/vue-v3/application/src/main.js index 578233357..b6feb9430 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/main.js +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/main.js @@ -2,7 +2,7 @@ import { createApp } from "vue"; import router from "./router"; import themes from "devextreme/ui/themes"; -import App from "./App"; +import App from "./App.vue"; import appInfo from "./app-info"; themes.initialized(() => { diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/src/router.js b/packages/devextreme-cli/src/templates/vue-v3/application/src/router.js index 0d99e35f3..89aa98ffa 100644 --- a/packages/devextreme-cli/src/templates/vue-v3/application/src/router.js +++ b/packages/devextreme-cli/src/templates/vue-v3/application/src/router.js @@ -1,11 +1,11 @@ import auth from "./auth"; import { createRouter, createWebHashHistory } from "vue-router"; -<%=^empty%>import Home from "./views/home-page"; -import Profile from "./views/profile-page"; -import Tasks from "./views/tasks-page"; -<%=/empty%>import defaultLayout from "./layouts/<%=layout%>"; -import simpleLayout from "./layouts/single-card"; +<%=^empty%>import Home from "./views/home-page.vue"; +import Profile from "./views/profile-page.vue"; +import Tasks from "./views/tasks-page.vue"; +<%=/empty%>import defaultLayout from "./layouts/<%=layout%>.vue"; +import simpleLayout from "./layouts/single-card.vue"; function loadView(view) { return () => import (/* webpackChunkName: "login" */ `./views/${view}.vue`) diff --git a/packages/devextreme-cli/src/templates/vue-v3/application/vue.config.js b/packages/devextreme-cli/src/templates/vue-v3/application/vue.config.js deleted file mode 100644 index f053ebf79..000000000 --- a/packages/devextreme-cli/src/templates/vue-v3/application/vue.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {};