Webpack 4 遇到 Less 问题
Webpack 4 Having Trouble with Less
我是 webpack 的新手,我只是想让它在一个新的空 .net 核心 web 项目中同时处理 typescript 和 less 文件,并输出相应的 js 和 css文件到指定文件夹。
我已经设法使用 awesome-typescript-loader
使打字稿正常工作。但是,我无法让 less loader 正常工作。
我一直在使用 webpack 的 less-loader documentation。但是,它总是在构建输出中抛出以下错误:
C:\workspace\fakeproject\node_modules\webpack\lib\Chunk.js:460
1> throw new Error(
1> ^
1>EXEC : error : Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
这是我的 package.json:
{
"version": "1.0.0",
"name": "asp.net",
"private": true,
"devDependencies": {
"awesome-typescript-loader": "^5.0.0-0",
"css-loader": "^0.28.10",
"extract-text-webpack-plugin": "^3.0.2",
"less-loader": "^4.0.6",
"style-loader": "^0.20.2",
"typescript": "^2.7.2",
"webpack": "^4.1.0",
"yarn": "^1.5.1"
},
"scripts": {
"build:Debug": "webpack --config webpack.dev.config.js",
"build:Release": "webpack --config webpack.prod.config.js"
}
}
和我的 webpack.dev.config.js:
"use strict"
{
const path = require('path');
const outputFolder = "wwwroot/dist/";
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const extractLess = new ExtractTextPlugin({
filename: "[name].[contenthash].css"
});
module.exports = {
"mode": "development",
"entry": {
"styles": "./Styles/main.less",
"scripts": "./Scripts/main.ts",
},
"output": {
"path": path.resolve(__dirname, outputFolder),
"filename": "[name].js",
},
"resolve": {
"extensions": ['.ts', '.tsx', '.js']
},
"devtool": "source-map",
"module": {
"rules": [
{
test: /\.less$/,
use: extractLess.extract({
use: [{
loader: "css-loader"
}, {
loader: "less-loader"
}],
fallback: "style-loader"
})
},
{
"test": /\.tsx?$/,
"loader": 'awesome-typescript-loader',
"exclude": /node_modules/,
}
]
},
plugins: [
extractLess
]
};
}
我使用以下脚本在项目上设置了一个 post-build 事件:
npm run-script build:$(ConfigurationName)
我的main.less文件简单如下:
@light-green: #42f49e;
body {
background-color: @light-green;
}
我是不是做错了什么或者使用了错误的依赖版本?在此先感谢您的帮助。
问题不在于您的代码。
Webpack 刚刚更新到版本 4,很多插件仍然有点落后。
突破性的变化还是不大的,所以这应该很快就解决了。在那之前最好留在 3.x
但是对于您的情况,已经有一个支持 webpack 4 的 extract-text-webpack-plugin
版本。
你可以安装它。
npm install extract-text-webpack-plugin@next
我是 webpack 的新手,我只是想让它在一个新的空 .net 核心 web 项目中同时处理 typescript 和 less 文件,并输出相应的 js 和 css文件到指定文件夹。
我已经设法使用 awesome-typescript-loader
使打字稿正常工作。但是,我无法让 less loader 正常工作。
我一直在使用 webpack 的 less-loader documentation。但是,它总是在构建输出中抛出以下错误:
C:\workspace\fakeproject\node_modules\webpack\lib\Chunk.js:460
1> throw new Error(
1> ^
1>EXEC : error : Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
这是我的 package.json:
{
"version": "1.0.0",
"name": "asp.net",
"private": true,
"devDependencies": {
"awesome-typescript-loader": "^5.0.0-0",
"css-loader": "^0.28.10",
"extract-text-webpack-plugin": "^3.0.2",
"less-loader": "^4.0.6",
"style-loader": "^0.20.2",
"typescript": "^2.7.2",
"webpack": "^4.1.0",
"yarn": "^1.5.1"
},
"scripts": {
"build:Debug": "webpack --config webpack.dev.config.js",
"build:Release": "webpack --config webpack.prod.config.js"
}
}
和我的 webpack.dev.config.js:
"use strict"
{
const path = require('path');
const outputFolder = "wwwroot/dist/";
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const extractLess = new ExtractTextPlugin({
filename: "[name].[contenthash].css"
});
module.exports = {
"mode": "development",
"entry": {
"styles": "./Styles/main.less",
"scripts": "./Scripts/main.ts",
},
"output": {
"path": path.resolve(__dirname, outputFolder),
"filename": "[name].js",
},
"resolve": {
"extensions": ['.ts', '.tsx', '.js']
},
"devtool": "source-map",
"module": {
"rules": [
{
test: /\.less$/,
use: extractLess.extract({
use: [{
loader: "css-loader"
}, {
loader: "less-loader"
}],
fallback: "style-loader"
})
},
{
"test": /\.tsx?$/,
"loader": 'awesome-typescript-loader',
"exclude": /node_modules/,
}
]
},
plugins: [
extractLess
]
};
}
我使用以下脚本在项目上设置了一个 post-build 事件:
npm run-script build:$(ConfigurationName)
我的main.less文件简单如下:
@light-green: #42f49e;
body {
background-color: @light-green;
}
我是不是做错了什么或者使用了错误的依赖版本?在此先感谢您的帮助。
问题不在于您的代码。
Webpack 刚刚更新到版本 4,很多插件仍然有点落后。
突破性的变化还是不大的,所以这应该很快就解决了。在那之前最好留在 3.x
但是对于您的情况,已经有一个支持 webpack 4 的 extract-text-webpack-plugin
版本。
你可以安装它。
npm install extract-text-webpack-plugin@next