css-loaderを使用してcssを追加しようとすると、webpackが機能しません。
os:Windows 10 pro、webpack:4.8.0ノード:8.9.4 npm:6.0.0 css-loader:0.28.11 style-loader:0.21.0
package.json
_ {
"name": "webpack-dev",
"version": "1.0.0",
"description": "",
"main": "index.php",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "./src/app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.11",
"node-sass": "^4.9.0",
"raw-loader": "^0.5.1",
"sass-loader": "^7.0.1",
"style-loader": "^0.21.0",
"url-loader": "^1.0.1",
"webpack": "^4.8.1",
"webpack-cli": "^2.1.3"
}
}
_
app.js
_require('./style.css');
require('./scripts.js');
_
エラーメッセージ
_Version: webpack 4.8.1
Time: 2157ms
Built at: 2018-05-09 14:13:17
Asset Size Chunks Chunk Names
bundle.js 3.68 KiB main [emitted] main
Entrypoint main = bundle.js
[./src/app.js] 48 bytes {main} [built]
[./src/scripts.js] 28 bytes {main} [built]
[./src/style.css] 222 bytes {main} [built] [failed] [1 error]
ERROR in ./src/style.css
Module build failed: Unknown Word (2:1)
1 |
> 2 | var content = require("!!./style.css");
| ^
3 |
4 | if(typeof content === 'string') content = [[module.id, content, '']];
5 |
@ ./src/app.js 1:0-22
_
style.css
_body {
color: red;
}
_
コマンドwebpack
を使用するだけで、毎回失敗します。これはこれまでで最も苛立たしいツールです。 requireステートメントの前に_!!
_を置いた場合、つまりrequire(!!'./style.css')
を除いて、何も機能しません。
Npm、stackoverflowなどで見つけることができるこれに関するすべてのバグレポートを読みましたが、私の問題を指摘するものは何もないようです。私は文字通りwebpackのモジュールセクションから逐語的に指示に従いましたが、それでも機能しません。助けてください!
編集:設定ファイルを忘れた
_const webpack = require('webpack')
const path = require('path')
const config = {
entry: './src/app.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
mode: 'development',
module: {
rules: [
{
test: /\.(s*)css$/,
use: [
'sass-loader',
'css-loader',
'style-loader'
]
},
{
test: /\.js$/,
exclude: /(node_modules)/,
use: [
'babel-loader'
]
},
{
test: /\.(png|svg|jpg)$/,
use: [
'file-loader'
]
}
]
}
};
module.exports = config;
_
順序が重要であることが判明
_...
use: [
"style-loader",
"css-loader",
"sass-loader"
]
...
_
Webpackでは、ルール内に複数のローダーをリストすると、それらは右から左(この場合は下から上)に評価されるため、scssルールは次のようになります。
{
test: /\.(s*)css$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}
その理由は、最初にsassをcssにコンパイルしてから、スタイルローダーを介してcssをhtmlファイルにインライン化するためです。
また、sassを使用していない場合は、sass-loaderを削除できます。
これらの問題をチェックして、私のWebパックプロジェクトで同様の問題を取得してください。Webパックルールをチェックする必要があります。
{
test: /\.(s*)css$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}
上記で、sassまたはCSSファイルを処理するルールを更新しました。テストはテストです:/。(s *)css $ /:これは正規表現/.(s*)css$/i.eと一致する名前を持つファイルを意味します。 .scssまたは.css
Use配列で指定されたローダーのチェーン、つまり['style-loader'、 'css-loader'、 'sass-loader']を使用してコンパイルする必要があります。
このルールは、sass-loaderの出力をcss-loaderにチェーンします。 css-loaderは、sass-loaderのこのcss出力を受け取り、アプリケーションにある他の.cssファイルも処理し、.cssをstyle-loaderに渡します。これにより、cssコードがタグ内に配置されます。 index.htmlでは、下から上に機能します。