Ответ 1
Правильнее использовать этот импорт:
const { CleanWebpackPlugin } = require('clean-webpack-plugin');'
А затем вместо передачи массива с папкой распространения измените его на
plugins: [
new CleanWebpackPlugin(),
//...
]
я пытаюсь просмотреть веб-приложение vue через webpack-server-dev. Я следую этому руководству https://medium.com/the-web-tub/creating-your-first-vue-js-pwa-project -22f7c552fb34
Руководство объясняет, что плагин используется для удаления старых и неиспользуемых файлов в каталоге dist. Я уже пытался заменить const CleanWebpackPlugin = require('clean-webpack-plugin')
на const { CleanWebpackPlugin } = require('clean-webpack-plugin')
который предлагается в некоторых сообщениях. Я также попытался просмотреть документацию по адресу https://github.com/johnagan/clean-webpack-plugin, но безуспешно, так как я довольно новичок в этом.
когда я пытаюсь npm run dev
я получаю эту ошибку
new CleanWebpackPlugin(['dist']),
^
TypeError: CleanWebpackPlugin is not a constructor
at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\webpack.config.js:56:5)
at handleFunction (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:21:13)
at prepareOptions (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:9:5)
at requireConfig (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:119:14)
at C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:125:17
at Array.forEach (<anonymous>)
at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:123:15)
at Object.<anonymous> (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-dev-server\bin\webpack-dev-server.js:79:40)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
и это файл webpack.config.js
const path = require('path')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = (env, argv) => ({
mode: argv && argv.mode || 'development',
devtool: (argv && argv.mode || 'development') === 'production' ? 'source-map' : 'eval',
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js'
},
node: false,
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.js$/,
loader: 'babel-loader'
},
{
test: /\.css$/,
use: [
'vue-style-loader',
'css-loader'
],
exclude: /\.module\.css$/
}
]
},
resolve: {
extensions: [
'.js',
'.vue',
'.json'
],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': path.resolve(__dirname, 'src')
}
},
plugins: [
new CleanWebpackPlugin(['dist']),
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'static', 'index.html'),
inject: true
}),
new CopyWebpackPlugin([{
from: path.resolve(__dirname, 'static'),
to: path.resolve(__dirname, 'dist'),
toType: 'dir'
}])
],
optimization: {
splitChunks: {
chunks: 'all',
minSize: 30000,
maxSize: 0,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
},
runtimeChunk: {
name: entrypoint => 'runtime~${entrypoint.name}'
},
mangleWasmImports: true,
removeAvailableModules: true,
removeEmptyChunks: true,
mergeDuplicateChunks: true
},
devServer: {
compress: true,
host: 'localhost',
https: true,
open: true,
overlay: true,
port: 9000
}
});
это ошибка, которую я получаю при использовании правильного импорта, как объяснено в документации:
throw new Error('clean-webpack-plugin only accepts an options object. See:
^
Error: clean-webpack-plugin only accepts an options object. See:
https://github.com/johnagan/clean-webpack-plugin#options-and-defaults-optional
at new CleanWebpackPlugin (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\clean-webpack-plugin\dist\clean-webpack-plugin.js:27:13)
at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\webpack.config.js:56:5)
at handleFunction (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:21:13)
at prepareOptions (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:9:5)
at requireConfig (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:119:14)
at C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:125:17
at Array.forEach (<anonymous>)
at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:123:15)
at Object.<anonymous> (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-dev-server\bin\webpack-dev-server.js:79:40)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
если я удалю строку 56 в webpack.config.js, я могу запустить веб-приложение без проблем, но я хочу понять источник этой проблемы
Правильнее использовать этот импорт:
const { CleanWebpackPlugin } = require('clean-webpack-plugin');'
А затем вместо передачи массива с папкой распространения измените его на
plugins: [
new CleanWebpackPlugin(),
//...
]
С обновлением вам нужно сделать следующее, чтобы включить его
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
Затем в массив плагинов замените, добавьте следующее
plugins: [
new CleanWebpackPlugin(['dist]),
]
с
plugins: [
new CleanWebpackPlugin(),
]
Как и в случае с обновлением, нет необходимости передавать какие-либо параметры, поскольку он удалит все файлы в каталоге output.path
файла output.path
, а также все неиспользуемые ресурсы веб-пакета после каждого успешного перестроения.
У меня была та же проблема сегодня, прямо сейчас. Как вы можете заметить, произошло несоответствие между документами и реальным кодом. И на самом деле, вы можете видеть, что в последнем коммите они слились с документацией:
а также к коду:
Поэтому я просто переключился с const CleanWebpackPlugin = require('clean-webpack-plugin')
на
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
и работает нормально.
Я думаю, что вы, возможно, оказались между вещами. Переустановите пакет npm и попробуйте снова, он должен работать.
Я написал кое-что из того, что вы можете увидеть в их общедоступном репозитории, потому что очень часто, когда происходят такие внезапные изменения, вы найдете свой собственный ответ в репозитории, возможно, в последних коммитах. И хорошо читать немного кода, который вы используете, особенно если это поможет вам решить проблему :)
У меня была та же проблема, и я решил ее следующим образом:
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
Для тех, кто обнаружил эту ошибку в последних обновлениях nativescript-vue, я исправил ее, изменив webpack.config.js
(файл верхнего уровня в папке приложения). Как и выше, теперь он отражает синтаксис в документации CleanaebpackPlugin.
//const CleanWebpackPlugin = require("clean-webpack-plugin");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
и
//new CleanWebpackPlugin(itemsToClean, { verbose: !!verbose }),
new CleanWebpackPlugin(),
Я не очень хорошо знаком с веб-пакетом и сейчас изучаю его
хотя эта вещь помогла мне решить проблему
Я просто удаляю clean-webpack-plugin, а затем переустанавливаю как зависимость, прежде чем это я установил как dev-зависимость
после удаления и установки так: npm install --save clean-webpack-plugin
и добавив это
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
решил мою проблему !!
Надеюсь, поможет
Похоже, документы не работают, правильный код
const CleanWebpackPlugin = require ('clean-webpack-plugin')