一:开发移动页面时老是提示:react-native模块找不到。
Error: Cannot resolve module 'react-native'...
我只想开发移动web页面,为什么要我安装react-native模块?
原因是antd-mobile被设计为同时支持React Native应用开发和Web应用开发,所有的组件都暴露为2个模块文件: index.js(React Native开发)和index.web.js(Web开发)。
第1个方法:开发web应用时最好指定引用组件的js和样式:
import TabBar from 'antd-mobile/lib/tab-bar/index.web';
import 'antd-mobile/lib/tab-bar/style/index.css';
再配合babel-plugin-import 插件支持组件按需加载,设置如下:
// .babelrc
{"plugins": [["import", { "style": "css", "libraryName": "antd-mobile" }]]}
// or webpack config file
webpackConfig.babel.plugins.push(['import', { libraryName: 'antd-mobile', style: 'css' }]);
这样会减少打包后文件的体积。
第2个方法:配合webpack的resolve中设定 extensions 选项的值,并将 .web.js 放在 .js 之前,这样就会优先找.web.js后缀的js:
resolve: {
modulesDirectories: ['node_modules', path.join(__dirname, '../node_modules')],
extensions: ['', '.web.js', '.js']
}
github issue: https://github.com/ant-design/ant-design-mobile/issues/66
二、指定引用css时提示无法导入:
Module parse failed .css Unexpected token (1:0) You may need an appropriate loader to handle this file type.
明明webpack配置里已经使用了css-loader,为什么还是报错?
{
test: /\.css$/,
loader: 'style!css'
}
原来是在webpack loaders 配置的时候需要把 css 和 cssmodules 分开处理,并加上 exclude or include, 不去处理 antd-mobile引用的样式 。
{
test: /\.css$/,
loader: 'css?sourceMap&modules&localIdentName=[local]___[hash:base64:5]!!',
exclude: /node_modules/
},
{
test: /\.css$/,
loader: 'style!css'
}