首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用webpack从MDL加载特定组件

使用webpack从MDL加载特定组件
EN

Stack Overflow用户
提问于 2016-10-17 20:59:51
回答 2查看 924关注 0票数 2

我只想在我的项目中使用MDL的布局组件。

因此,在我的app.css文件中,我导入了以下内容:

@import url('~material-design-lite/src/layout/_layout.scss');

在构建过程中,我得到了以下错误:

代码语言:javascript
复制
ERROR in ./~/css-loader!./~/material-design-lite/src/layout/_layout.scss
Module not found: Error: Cannot resolve 'file' or 'directory' ../variables in /Users/Mitch/Documents/project/web/node_modules/material-design-lite/src/layout
 @ ./~/css-loader!./~/material-design-lite/src/layout/_layout.scss 3:10-66

ERROR in ./~/css-loader!./~/material-design-lite/src/layout/_layout.scss
Module not found: Error: Cannot resolve 'file' or 'directory' ../mixins in /Users/Mitch/Documents/project/web/node_modules/material-design-lite/src/layout
 @ ./~/css-loader!./~/material-design-lite/src/layout/_layout.scss 4:10-63

_layout.sccs从以下行开始

代码语言:javascript
复制
@import "../variables";
@import "../mixins";

你知道我做错了什么吗?

我的webpack.config.js的相关部分:

代码语言:javascript
复制
const PATHS = {
    node_modules: path.resolve(__dirname, 'node_modules'),
    build: path.join(__dirname, 'public', 'build'),
    js: path.resolve(__dirname, 'public', 'js'),
    css: path.resolve(__dirname, 'public', 'css'),
};

...
resolve: {
    root: [
        path.resolve(__dirname),
        PATHS.node_modules,
        PATHS.js,
        PATHS.css
    ],
    ...
    extensions: ['', '.js', '.jsx', '.json', '.css', '.scss']
},
module: {
    loaders: [
        {
            test: /\.css$/,
            loader: ExtractTextPlugin.extract('style-loader', 'css-loader')
        },
        {
            test: /\.scss$/,
            loader: ExtractTextPlugin.extract('style', 'css?modules!sass')
        },
        {
            test: /\.png$/,
            loader: 'url-loader?limit=100000'
        },
        {
            test: /\.jpg$/,
            loader: 'file-loader'
        },
        {
            test: /\.gif$/,
            loader: 'file-loader'
        },
        {
            test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
            loader: 'url?limit=10000&mimetype=application/font-woff'
        },
        {
            test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
            loader: 'url?limit=10000&mimetype=application/octet-stream'
        },
        {
            test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
            loader: 'file'
        },
        {
            test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
            loader: 'url?limit=10000&mimetype=image/svg+xml'
        },
        {
            test: /\.js$/,
            exclude: /node_modules/,
            loader: 'babel-loader',
            query: {
                presets: ['es2015']
            }
        }
    ]
}
...

相关依存关系:

代码语言:javascript
复制
...
"devDependencies": {
    "babel-core": "^6.14.0",
    "babel-loader": "^6.2.5",
    "babel-preset-es2015": "^6.14.0",
    "css-loader": "^0.25.0",
    "eslint": "^3.6.1",
    "extract-text-webpack-plugin": "^1.0.1",
    "file-loader": "^0.9.0",
    "node-sass": "^3.10.1",
    "sass-loader": "^4.0.2",
    "style-loader": "^0.13.1",
    "url-loader": "^0.5.7",
    "webpack": "^1.13.2",
    "webpack-validator": "^2.2.7"
}
...

更新

我试图将@import url('~material-design-lite/src/material-design-lite.scss');修改为只导入布局组件,因为这不是一个部分。

现在,我收到以下错误:

代码语言:javascript
复制
ERROR in ./~/css-loader!./~/material-design-lite/src/material-design-lite.scss
Module build failed: Unknown word (19:1)

  17 | /* Material Design Lite */
  18 | 
> 19 | // Variables and mixins
     | ^
  20 | @import "variables";
  21 | @import "mixins";
  22 | 

 @ ./~/css-loader!./public/css/app.css 3:10-114

评论失败了。我不知道如何解决这个问题,我尝试使用postcsspostcss-scss加载器以及postcss-strip-inline-comments插件,但没有效果;旧的错误只是被新的错误所取代。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 09:51:49

您的示例中的实际问题是,您是像这样导入MDL的

代码语言:javascript
复制
@import url('~material-design-lite/src/layout/_layout.scss');

而不是

代码语言:javascript
复制
@import '~material-design-lite/src/layout/_layout.scss';

第一个被SASS -加载程序忽略(因为SASS没有url()导入),并且将由css-加载程序处理。但是css-加载程序不会自动将.scss展开为variables。这就是为什么你要得到这些“模块找不到”错误。

票数 2
EN

Stack Overflow用户

发布于 2016-10-19 20:10:45

我找到了解决办法/解决办法。

我所做的就是在我的custom-mdl.scss dir中创建了一个css/文件,在这里我只做了

@import '~material-design-lite/src/layout/_layout.scss';

并且修改了我的入口点

代码语言:javascript
复制
app : [ 'app.js', 'custom-mdl.scss', 'app.css' ]

而不是仅仅

代码语言:javascript
复制
app : [ 'app.js', 'app.css' ]

上面的内容构建得很好,custom-mdl输出在包中的app.css内容之前,就像预期的那样。

请注意,我还从我的?modules配置中删除了ExtractTextPlugin,因此

ExtractTextPlugin.extract('style', 'css!sass')

而不是

ExtractTextPlugin.extract('style', 'css?modules!sass')

否则,custom-mdl.scss文件的类名就会出现混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40095558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档