如何解决观看更改时,使用VueJS和Larave's Mix进行的滑动无法正确编译
我正在使用Laravel的mix
来编译Vue组件和JS文件。我可以成功运行watch
命令,并且一切都可以成功编译,并且网站可以按预期加载。我能够对不导入Swiper
Vue组件的所有JS / Vue文件进行更改,并且所有内容都能按预期编译并运行。如果我更改了导入Swiper
Vue组件的Vue文件中的任何内容,则编译器将失败,并且我将收到以下消息:
未捕获的错误:模块构建失败:错误:ENOENT:没有此类文件或目录,打开'/Users/me/Sites/vue-with-swiper/node_modules/swiper/swiper.esm.js'
然后,我必须停止编译器并使用npm run watch
重新启动它,它将再次成功编译,而无需对代码进行任何进一步更改。
如何使我的编译器在后续编译中成功而不需要重新启动它?
更多详细信息:
Vue组件:
<template>
<section class="editor-region">
<template v-else-if="loaded && slides.length">
<Swiper
ref="swiper"
:key="'region-slider-' + regionNumber"
:id="'region-slider-' + regionNumber"
:options="swiperOptions"
>
<SwiperSlide
v-for="slide in regionSlides[regionNumber]"
:key="'slide-' + slide.slide.ID"
>
<EditorSlideThumbnail
:slide="slide"
/>
</SwiperSlide>
<div class="swiper-button-prev" slot="button-prev"></div>
<div class="swiper-button-next" slot="button-next"></div>
</Swiper>
</template>
</section>
</template>
<script>
import EditorSlideThumbnail from './EditorSlideThumbnail';
import {Swiper,SwiperSlide,directive} from 'vue-awesome-swiper';
// import style (<= Swiper 5.x)
import 'swiper/css/swiper.css';
export default {
name: 'EditorRegion',components: {
EditorSlideThumbnail,Swiper,SwiperSlide
},directives: {
swiper: directive
},data() {
return {
loaded: false,swiperOptions: {
slidesPerView: 7,slidesPerGroup: 7,freeMode: true,lazy: true,navigation: {
nextEl: '.swiper-button-next',prevEl: '.swiper-button-prev'
}
},};
},props: {
regionNumber: {
type: Number,required: true,}
}
}
package.json:
{
"name": "vuewithswiper","description": "Vue app with Swiper","dependencies": {
"@ckeditor/ckeditor5-build-classic": "^23.1.0","@ckeditor/ckeditor5-vue": "^1.0.3","axios": "^0.20.0","babel-code-frame": "^6.26.0","babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1","babel-helper-call-delegate": "^6.24.1","babel-helper-define-map": "^6.26.0","babel-helper-function-name": "^6.24.1","babel-helper-get-function-arity": "^6.24.1","babel-helper-regex": "^6.26.0","babel-helper-replace-supers": "^6.24.1","babel-messages": "^6.23.0","babel-template": "^6.26.0","babel-traverse": "^6.26.0","babel-types": "^6.26.0","bootstrap": "^3.4.1","cross-env": "^7.0.2","flatpickr": "^4.6.6","instascan": "^1.0.0","jquery": "^3.5.1","lodash": "^4.17.20","luxon": "^1.25.0","node-sass": "^4.14.1","pexels": "^1.0.1","portal-vue": "^2.1.7","swiper": "^5.4.5","vue": "^2.6.12","vue-awesome-swiper": "^4.1.1","vue-ctk-date-time-picker": "^2.5.0","vue-select": "^3.10.8","vue-slick-carousel": "^1.0.6","vue-slider-component": "^3.2.10","vue-swatches": "^2.1.0","vuex": "^3.5.1","weekstart": "^1.0.1"
},"devDependencies": {
"babel-preset-es2015": "^6.24.1","browser-sync": "^2.26.12","dropzone": "^5.7.2","fibers": "^5.0.0","fs": "0.0.1-security","glob": "^7.1.6","jquery-ui": "^1.12.1","jquery-ui-touch-punch": "^0.2.3","jshint": "^2.12.0","laravel-mix": "^5.0.6","laravel-mix-glob": "^1.1.4","localforage": "^1.9.0","merge": "^1.2.0","merge-stream": "^1.0.1","moment": "^2.29.1","path": "^0.12.7","popper.js": "^1.16.1","resolve-url-loader": "^3.1.2","sass": "^1.27.0","sass-loader": "^8.0.2","vue-template-compiler": "^2.6.12"
},"scripts": {
"dev": "npm run development","development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js","watch": "npm run development -- --watch","hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js","prod": "npm run production","production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
}
}
webpack.mix.js
const mix = require('laravel-mix');
const MixGlob = require('laravel-mix-glob');
const production = mix.inProduction();
const devtool = production ? false : 'source-map';
const glob = new MixGlob({
mix,mapping: {}
});
mix.webpackConfig({
devtool,output: {
path: __dirname + '/',publicPath: '/js/min/',filename: '[name].js',chunkFilename: 'chunks/[name].js'
},});
mix.options({
processCssUrls: false
});
/* Admin JS */
mix.js('js/app.js','admin/js/min/global.js');
mix.js('admin/js/app.js','admin/js/min/app.js');
/* Admin Components JS */
mix.js('admin/js/component/stripe-card.js','admin/js/min/component/stripe-card.min.js');
mix.js('admin/js/component/report.js','admin/js/min/component/report.min.js');
mix.js('admin/js/component/region-layout-editor.js','admin/js/min/component/region-layout-editor.min.js');
mix.js('admin/js/component/google-drive.js','admin/js/min/component/google-drive.min.js');
/* Admin CSS */
mix.sass('admin/src/scss/main.scss','admin/css/min/app.css');
/* Display JS */
mix.js('js/app.js','display/js/min/global.js');
mix.js('display/js/app.js','display/js/min/app.js');
/* Display CSS */
mix.sass('display/src/scss/main.scss','display/css/mix/min/main.css');
/* Legacy Display CSS */
mix
.sass('display/src/legacy/bootstrap.min.scss','display/css/bootstrap.min.css')
.sass('display/src/legacy/bootstrap-theme.min.scss','display/css/bootstrap-theme.min.css')
.sass('display/src/legacy/main.scss','display/css/main.css')
.sass('display/src/legacy/cms.scss','display/css/cms.css');
glob.sass('display/src/layouts/*','display/css/mix/min/');
glob.sass('inc/Widgets/**/**/assets/scss/style.scss','display/widgets/mix/',null,{
base: function (file,ext,mm) { // mm => micromatch instance
if (mm.every(file,['inc/Widget/**/**/assets/scss/*'])) {
return 'display/widgets/mix/';
}
}
});
glob.js('inc/Widgets/**/**/assets/js/index.js',['inc/Widget/**/**/assets/js/*'])) {
return 'display/widgets/mix/';
}
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。