Javascript 如何将 CSS 文件导入 webpack?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/44474484/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to import CSS files into webpack?
提问by WoJ
According to the documentation, CSS file should just be imported.
根据文档,应该只import编辑CSS 文件。
I am just starting with webpackand tried to import a CSS file but I get a message about a module missing:
我刚刚开始webpack并尝试导入一个 CSS 文件,但我收到一条关于缺少模块的消息:
D:\Dropbox\dev\jekyll\blog>webpack --display-error-details
Hash: 0cabc1049cbcbdb8d134
Version: webpack 2.6.1
Time: 74ms
Asset Size Chunks Chunk Names
build.js 2.84 kB 0 [emitted] main
[0] ./webpack/entry.js 47 bytes {0} [built]
ERROR in ./webpack/entry.js
Module not found: Error: Can't resolve 'navbar.css' in 'D:\Dropbox\dev\jekyll\blog\webpack'
resolve 'navbar.css' in 'D:\Dropbox\dev\jekyll\blog\webpack'
Parsed request is a module
using description file: D:\Dropbox\dev\jekyll\blog\package.json (relative path: ./webpack)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Dropbox\dev\jekyll\blog\package.json (relative path: ./webpack)
resolve as module
D:\Dropbox\dev\jekyll\blog\webpack\node_modules doesn't exist or is not a directory
D:\Dropbox\dev\jekyll\node_modules doesn't exist or is not a directory
D:\Dropbox\dev\node_modules doesn't exist or is not a directory
D:\Dropbox\node_modules doesn't exist or is not a directory
D:\node_modules doesn't exist or is not a directory
looking for modules in D:\Dropbox\dev\jekyll\blog\node_modules
using description file: D:\Dropbox\dev\jekyll\blog\package.json (relative path: ./node_modules)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Dropbox\dev\jekyll\blog\package.json (relative path: ./node_modules)
using description file: D:\Dropbox\dev\jekyll\blog\package.json (relative path: ./node_modules/navbar.css)
as directory
D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css doesn't exist
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css.js doesn't exist
.json
Field 'browser' doesn't contain a valid alias configuration
D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css.json doesn't exist
[D:\Dropbox\dev\jekyll\blog\webpack\node_modules]
[D:\Dropbox\dev\jekyll\node_modules]
[D:\Dropbox\dev\node_modules]
[D:\Dropbox\node_modules]
[D:\node_modules]
[D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css]
[D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css]
[D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css.js]
[D:\Dropbox\dev\jekyll\blog\node_modules\navbar.css.json]
@ ./webpack/entry.js 1:0-21
webpackis ran against the following webpack.config.js:
webpack针对以下几点运行webpack.config.js:
const path = require('path');
module.exports = {
entry: path.join(__dirname, 'webpack/entry.js'),
output: {
path: path.join(__dirname, 'dist'),
filename: 'build.js'
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
}
],
rules: [{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}]
}
}
I initially thought (before using --display-error-details) that this was due to some problems with the path structure (specifically forward vs. backward slashes) but then moved navbar.cssinto the root of the folder webpack- same issue.
我最初认为(在使用之前--display-error-details)这是由于路径结构的一些问题(特别是正斜杠与反斜杠),但后来移到navbar.css了文件夹的根目录webpack- 同样的问题。
The detailed error shows that the CSS file is sought after in nodes_module(which is hunted down though all the directories tree). Why? How should I then import a file which is in webpack/static/css/myfile.cssrelative to the location of webpack.config.js?
详细的错误表明 CSS 文件在nodes_module(通过所有目录树被追捕)中被寻找。为什么?然后我应该如何导入一个webpack/static/css/myfile.css相对于 的位置的文件webpack.config.js?
Note: the same issue exists when trying requireinstead of import
注意:尝试require代替时存在相同的问题import
回答by Michael Jungo
You have to import them like any JavaScript module. That means, when the imported file is neither a relative path (starting with ../or ./), nor an absolute path (starting with /), it is resolved as a module. By default webpack will look for modules in the node_modulesdirectory (in the current directory and all parent directories). This is the same behaviour that Node.js uses.
您必须像导入任何 JavaScript 模块一样导入它们。这意味着,当导入的文件既不是相对路径(以../或开头./),也不是绝对路径(以 开头/)时,它会被解析为模块。默认情况下,webpack 会在node_modules目录中(在当前目录和所有父目录中)查找模块。这与Node.js 使用的行为相同。
To import webpack/static/css/myfile.cssin webpack/entry.jsyou have to use a relative path.
要导入webpack/static/css/myfile.css,webpack/entry.js您必须使用相对路径。
import './static/css/myfile.css';
If you don't want to use a relative path, you can change the directories that webpack uses to find a module with the resolve.modulesor you can use resolve.alias.
如果您不想使用相对路径,您可以更改 webpack 用于查找模块的目录,resolve.modules或者您可以使用resolve.alias.
In your webpack config you also defined both module.rulesand module.loaders. When webpack sees module.rulesit ignores module.loaderscompletely, so your babel-loaderwouldn't be used. You should only use module.rules.
在您的 webpack 配置中,您还定义了module.rules和module.loaders. 当 webpack 看到module.rules它module.loaders完全忽略时,所以你babel-loader不会被使用。您应该只使用module.rules.
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}

