vue版本是vue2。
前端工程的webpack版本是webpack4,版本号4.47.0。
参考的工程是mars3d基于vue2的工程。
首先在package.json中添加了依赖包:
在dependencies:中添加:
"@turf/turf": "^6.5.0",
"mars3d": "3.7.0",1.118.0"
"mars3d-cesium": "
在devDependencies中添加
"copy-webpack-plugin": "^6.3.2",
"node-polyfill-webpack-plugin": "^2.0.1"
然后在vue.config.js中添加:
const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
...省略
configureWebpack:(config) => {
const cesiumSourcePath = 'node_modules/mars3d-cesium/Build/Cesium/' // cesium库安装目录
const cesiumRunPath = './mars3d-cesium/' // cesium运行时路径
if (process.env.NODE_ENV === 'production') {
// 在生产环境下自定义 CopyPlugin 的行为,或者禁用它
// 例如:
// config.plugins.push(
// new CopyPlugin({
// patterns: [
// { from: 'public', to: 'public' },
// // 添加更多的复制规则...
// ],
// })
// );
} else {
// 在开发环境下禁用 CopyPlugin
config.plugins = config.plugins.filter(
plugin => !(plugin.constructor && plugin.constructor.name === 'CopyPlugin')
);
}
return {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
},
module: { unknownContextCritical: false }, // 配置加载的模块类型,cesium时必须配置
plugins: [
// http://doc.ssc.vip/ssc-vue/other/faq.html#使用gzip解压缩静态文件
isProduction && new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
}),
// 标识cesium资源所在的主目录,cesium内部资源加载、多线程等处理时需要用到
new webpack.DefinePlugin({
CESIUM_BASE_URL: JSON.stringify(path.join(config.output.publicPath, cesiumRunPath))
}),
// Cesium相关资源目录需要拷贝到系统目录下面(部分CopyWebpackPlugin版本的语法可能没有patterns)
new CopyWebpackPlugin({
patterns: [
{ from: path.join(cesiumSourcePath, 'Workers'), to: path.join(config.output.path, cesiumRunPath, 'Workers') },
{ from: path.join(cesiumSourcePath, 'Assets'), to: path.join(config.output.path, cesiumRunPath, 'Assets') },
{ from: path.join(cesiumSourcePath, 'ThirdParty'), to: path.join(config.output.path, cesiumRunPath, 'ThirdParty') },
{ from: path.join(cesiumSourcePath, 'Widgets'), to: path.join(config.output.path, cesiumRunPath, 'Widgets') }
]
}),
new NodePolyfillPlugin()
].filter(Boolean)
}
},
然后修改public文件夹中的html移除掉直接引用的mars3d和cesium的js及样式
然后在代码中import mars3d和cesium
最后npm install
然后npm run dev
然后就报错了
./node_modules/mars3d/dist/mars3d.js 14:18927 Module parse failed: Unexpected token (14:18927) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
注意到mars3官方的基于vue2的demo的webpack版本是webpack5。
怎么解决?