我正在尝试按照 Material Component Web's Getting Started Guide将Material Web Components实现到我的 Web 应用程序中。
我能够成功设置 Webpack (V3) 来为 Web 组件加载 SASS。这是在遇到包含路径问题之后。我可以通过将此行添加到我的webpack.config.js
.
{
loader: 'sass-loader',
options: {
includePaths: ['./node_modules']
}
}
但是,我没有成功编译 JS。
有问题的组件是 Material Web 的Top App Bar。
在我的主 js 文件中,我有以下内容:
import {MDCTopAppBar} from './../../node_modules/@material/top-app-bar/index.js';
const topAppBarElement = document.querySelector('.mdc-top-app-bar');
const topAppBar = new MDCTopAppBar(topAppBarElement);
我最初把它写成:
import {MDCTopAppBar} from './node_modules/@material/top-app-bar/index';
但是 Webpack 抱怨找不到文件:
找不到模块:错误:无法解析“./node_modules/@material/top-app-bar/index”。
我尝试webpack.config.js
根据 Webpack 的Module.alias文档将此代码添加到我的 .
resolve: {
alias: {
MDCTopAppBar: path.resolve(__dirname, 'node_modules/@material/')
}
}
唉,代码编译但在 Chrome 的 DevTools 中我收到以下错误:
未捕获的类型错误:无法解析模块说明符“@material/base/component”。相对引用必须以“/”、“./”或“../”开头。
此错误来自Top App Bar 的 index.js
文件,该文件导入了一堆其他组件:
import MDCTopAppBarAdapter from './adapter';
import MDCComponent from '@material/base/component';
import {MDCRipple} from '@material/ripple/index';
import {cssClasses, strings} from './constants';
import MDCTopAppBarBaseFoundation from './foundation';
import MDCFixedTopAppBarFoundation from './fixed/foundation';
import MDCShortTopAppBarFoundation from './short/foundation';
import MDCTopAppBarFoundation from './standard/foundation';
这是该组件的文件结构的图片Top App Bar
:
/node_modules
/@material
/base
/ripple
/top-app-bar
-adapter.js
-constants
-index.js
/src
-main.js
在top-app-bar/index.js
中,我可以手动浏览此文件(以及我想要包含的任何后续模块)并将所有路径重写为相对路径,但这是一种糟糕的方法。
如何配置 Webpack 以自动解析这些相对路径?
我尝试在这样的各种突变中使用resolve.modules,但没有成功:
resolve: {
modules: [
path.resolve(__dirname, 'node_modules/@material'),
path.resolve(__dirname, 'node_modules/@material/base/'),
path.resolve(__dirname, 'node_modules/@material/base/component'),
path.resolve(__dirname, 'node_modules/@material/top-app-bar/'),
'node_modules'
]
}
这是我的项目依赖项:
"dependencies": {
"@material/top-app-bar": "^0.40.1"
},
"devDependencies": {
"autoprefixer": "^9.2.0",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-plugin-transform-object-assign": "^6.22.0",
"babel-preset-es2015": "^6.24.1",
"css-loader": "^1.0.0",
"extract-loader": "^3.0.0",
"file-loader": "^2.0.0",
"grunt": "^1.0.3",
"grunt-contrib-sass": "^1.0.0",
"grunt-contrib-watch": "^1.1.0",
"node-sass": "^4.9.4",
"postcss-loader": "^3.0.0",
"sass": "^1.14.2",
"sass-loader": "^7.1.0",
"webpack": "^3.12.0",
"webpack-cli": "^3.1.2",
"webpack-dev-server": "^2.11.3"
}
我想我要么必须弄清楚我在配置 webpack 时做错了什么,配置一个包babel-loader
来整理路径,要么实现一个类似于 webpack 的增强解析的自定义解决方案,但只是作为最后的手段。
先感谢您!