Ошибка vue-loader/less-loader при импорте с помощью TypeError: этот [node.type] не является функцией

Я пытаюсь импортировать внешний файл.css внутри однофайлового компонента Vue, используя less-loader. Без @import Заявление, веб-пакет работает без ошибок. Когда я включаю @import строка, это ошибки с:

TypeError: this[node.type] is not a function
    at Stringifier.stringify (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/stringifier.js:33:24)
    at Stringifier.body (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/stringifier.js:96:18)
    at Stringifier.root (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/stringifier.js:37:14)
    at Stringifier.stringify (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/stringifier.js:33:24)
    at MapGenerator.stringify (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/stringify.js:14:9)
    at MapGenerator.generate (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/map-generator.js:311:
18)
    at LazyResult.stringify (/home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/lazy-result.js:290:24)
    at /home/ctamayo/workspace/docker/tourusa/local/modules/TourUsa/templates/backOffice/default/node_modules/vue-loader/node_modules/postcss/lib/lazy-result.js:227:27
Hash: f8f131fa6a420e70a118
Version: webpack 3.6.0
Time: 1777ms
          Asset     Size  Chunks                    Chunk Names
availability.js  1.47 MB       0  [emitted]  [big]  availability
   [3] (webpack)/buildin/global.js 509 bytes {0} [built]
  [86] ./assets/src/availability.js 1.17 kB {0} [built]
  [91] ./node_modules/vue-style-loader!./node_modules/css-loader!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-627a049c","scoped":false,"hasInlineConfig":true}!./node
_modules/less-loader/dist/cjs.js?{"importLoaders":1}!./assets/src/less/availability.less 1.62 kB {0} [built]
  [92] ./node_modules/css-loader!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-627a049c","scoped":false,"hasInlineConfig":true}!./node_modules/less-loader/dist/cjs.js
?{"importLoaders":1}!./assets/src/less/availability.less 1.59 kB {0} [built] [failed] [1 error]
  [95] (webpack)/buildin/module.js 517 bytes {0} [built]
  [96] ./node_modules/moment/locale ^\.\/.*$ 1.95 kB {0} [optional] [built]
    + 103 hidden modules

Как настроить webpack/vue-loader, чтобы он не взрывался при попытке импортировать что-либо?

Вот как выглядит мое файловое дерево:

.
├── assets
│   ├── dist
│   │   └── js
│   │       └── availability.js
│   └── src
│       ├── availability.js
│       ├── components
│       │   ├── Calendar.vue
│       │   └── ...
│       └── less
│           └── fullcalendar.css
├── package.json
└── webpack.config.js

availability.js:

// module dependencies
import Vue from 'vue'

// custom components
import Calendar from './components/Calendar.vue'

new Vue({
  el: '#calendar-component',
  components: {
    calendar: Calendar,
    dateRangeEditor: DateRangeEditor,
    modal: Modal,
  },
  // ... blah blah
});

Calendar.vue:

<script>
export default {
  // ...
}
</script>

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

<!-- grab the FullCalendar CSS -->
<style lang="less">
  // include FullCalendar styles directly
  @import '../less/fullcalendar.css'; // <-- works without this!
  * { p { color: blue; } }
</style>

Мой webpack.config.js:

const path = require('path');

module.exports = {
  entry: {
    availability: './assets/src/availability.js',
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
            js: 'babel-loader',
            less: [{
              loader: 'vue-style-loader'
            }, {
              loader: 'css-loader',
            }, {
              loader: 'less-loader',
              options: { importLoaders: 1 },
            }],
          },
          postcss: {
            options: {
              parser: require('postcss-less')
            },
          },
        }
      },
      ...
    ]
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'assets/dist/js'),
  },
  watch: false,
};

Наконец, мой package.json:

{
  ...
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-helper-vue-jsx-merge-props": "^2.0.2",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-vue-jsx": "^3.5.0",
    "babel-preset-es2016": "^6.24.1",
    "babel-preset-vue-app": "^1.3.1",
    "css-loader": "^0.28.7",
    "fullcalendar": "^3.5.1",
    "grunt": "^1.0.1",
    "grunt-contrib-copy": "^1.0.0",
    "grunt-contrib-jshint": "^1.1.0",
    "grunt-contrib-watch": "^1.0.0",
    "grunt-webpack": "^3.0.2",
    "less": "^2.7.2",
    "less-loader": "^4.0.5",
    "magnific-popup": "^1.1.0",
    "moment": "2.9.0",
    "postcss-less": "^1.1.1",
    "vue": "^2.4.4",
    "vue-html-loader": "^1.2.4",
    "vue-loader": "^13.0.5",
    "vue-resource": "^1.3.4",
    "vue-style-loader": "^3.0.3",
    "vue-template-compiler": "^2.4.4",
    "webpack": "^3.6.0"
  }
}

0 ответов

Другие вопросы по тегам