Svelte应用程序不适用于Android 6.0.1或更高版本

Hiren Raiyani

我已经在Svelte中创建了Cordova应用程序演示,但是当我在android 6.0.1或更高版本上运行该应用程序时,该应用程序停滞在原位屏幕上。

您可以从下面的链接中找到检查屏幕,屏幕截图。我尝试了许多babel hack进行转换...这是许多传播者要转换的js,但没有解决方案。

出现了许多js问题,下面是两个最重要的问题。

未捕获的语法错误:意外的令牌...

未捕获的语法错误:未定义令牌*

https://forum.framework7.io/uploads/default/optimized/2X/5/511119ee16112390bb2bc6ecc4026b3028203e72_2_1380x786.png

我正在使用Framwork7-CLI创建Cordova android应用程序,Framework7版本为5.5.0和最新的Framwork7 CLI版本。

目前,我已选择带有Tabbed视图F7模板的Cordova和PWA应用程序。

我的pacakage.json,babel.config.js和webpack.config.js文件在下面。

pacakage.json

{
  "name": "test-app",
  "private": true,
  "version": "1.0.0",
  "description": "Test App",
  "repository": "",
  "license": "UNLICENSED",
  "framework7": {
    "cwd": "/Users/hirenraiyani/demo_apps",
    "type": [
      "pwa",
      "cordova"
    ],
    "name": "Test App",
    "framework": "svelte",
    "template": "tabs",
    "bundler": "webpack",
    "cssPreProcessor": "less",
    "theming": {
      "customColor": false,
      "color": "#007aff",
      "darkTheme": false,
      "iconFonts": true,
      "fillBars": false
    },
    "customBuild": false,
    "webpack": {
      "developmentSourceMap": true,
      "productionSourceMap": true,
      "hashAssets": false,
      "preserveAssetsPaths": false,
      "inlineAssets": true
    },
    "pkg": "io.framework7.myapp",
    "cordova": {
      "folder": "cordova",
      "platforms": [
        "android"
      ],
      "plugins": [
        "cordova-plugin-statusbar",
        "cordova-plugin-keyboard",
        "cordova-plugin-splashscreen",
        "cordova-plugin-wkwebview-engine",
        "cordova-plugin-device",
        "cordova-plugin-inappbrowser",
        "cordova-plugin-file",
        "cordova-plugin-media"
      ]
    }
  },
  "scripts": {
    "start": "npm run dev",
    "dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.js",
    "build-dev": "cross-env NODE_ENV=development node ./build/build.js",
    "build-prod": "cross-env NODE_ENV=production node ./build/build.js",
    "build-dev-cordova": "cross-env TARGET=cordova cross-env NODE_ENV=development node ./build/build.js && cd cordova && cordova build",
    "build-prod-cordova": "cross-env TARGET=cordova cross-env NODE_ENV=production node ./build/build.js && cd cordova && cordova build",
    "android-prod": "cross-env TARGET=cordova cross-env NODE_ENV=production node ./build/build.js && cd cordova && cordova run android",
    "postinstall": "cpy ./node_modules/framework7-icons/fonts/*.* ./src/fonts/"
  },
  "browserslist": [
    "Android >= 5",
    "IOS >= 11",
    "Safari >= 11",
    "Chrome >= 49",
    "Firefox >= 31",
    "Samsung >= 5"
  ],
  "dependencies": {
    "dom7": "^2.1.3",
    "framework7": "^5.5.0",
    "framework7-icons": "^3.0.0",
    "framework7-svelte": "^5.5.0",
    "svelte": "^3.19.2",
    "template7": "^1.4.2"
  },
  "devDependencies": {
    "@babel/core": "^7.8.7",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/plugin-transform-runtime": "^7.8.3",
    "@babel/preset-env": "^7.8.7",
    "@babel/runtime": "^7.8.7",
    "babel-loader": "^8.0.6",
    "chalk": "^3.0.0",
    "copy-webpack-plugin": "^5.1.1",
    "cpy-cli": "^3.1.0",
    "cross-env": "^7.0.2",
    "css-loader": "^3.4.2",
    "file-loader": "^5.1.0",
    "html-webpack-plugin": "^3.2.0",
    "less": "^3.11.1",
    "less-loader": "^5.0.0",
    "mini-css-extract-plugin": "^0.9.0",
    "optimize-css-assets-webpack-plugin": "^5.0.3",
    "ora": "^4.0.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "rimraf": "^3.0.2",
    "style-loader": "^1.1.3",
    "svelte-loader": "^2.13.6",
    "terser-webpack-plugin": "^2.3.5",
    "url-loader": "^3.0.0",
    "webpack": "^4.42.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.10.3",
    "workbox-webpack-plugin": "^5.0.0"
  }
}

babel.config.js

module.exports = {
  presets: [
    ['@babel/preset-env', {
      modules: false,
    }],
  ],
  plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/plugin-syntax-dynamic-import',
  ],
};

webpack.config.js

const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const WorkboxPlugin = require('workbox-webpack-plugin');

const path = require('path');

function resolvePath(dir) {
  return path.join(__dirname, '..', dir);
}

const env = process.env.NODE_ENV || 'development';
const target = process.env.TARGET || 'web';
const isCordova = target === 'cordova';


module.exports = {
  mode: env,
  entry: {
    app: './src/js/app.js',
  },
  output: {
    path: resolvePath(isCordova ? 'cordova/www' : 'www'),
    filename: 'js/[name].js',
    chunkFilename: 'js/[name].js',
    publicPath: '',
    hotUpdateChunkFilename: 'hot/hot-update.js',
    hotUpdateMainFilename: 'hot/hot-update.json',
  },
  resolve: {
    extensions: ['.mjs', '.js', '.svelte', '.json'],
    alias: {

      '@': resolvePath('src'),
    },
    mainFields: ['svelte', 'browser', 'module', 'main']
  },
  devtool: env === 'production' ? 'source-map' : 'eval',
  devServer: {
    hot: true,
    open: true,
    compress: true,
    contentBase: '/www/',
    disableHostCheck: true,
    historyApiFallback: true,
    watchOptions: {
      poll: 1000,
    },
  },
  optimization: {
    minimizer: [new TerserPlugin({
      sourceMap: true,
    })],
  },
  module: {
    rules: [
      {
        test: /\.(mjs|js|jsx)$/,
        use: 'babel-loader',
        include: [
          resolvePath('src'),
          resolvePath('node_modules/framework7'),


          resolvePath('node_modules/framework7-svelte'),
          resolvePath('node_modules/svelte'),
          resolvePath('node_modules/template7'),
          resolvePath('node_modules/dom7'),
          resolvePath('node_modules/ssr-window'),
        ],
      },

      {
        test: /\.svelte$/,
        use: {
          loader: 'svelte-loader',
          options: {
            emitCss: true,
          },
        },
      },

      {
        test: /\.css$/,
        use: [
          (env === 'development' ? 'style-loader' : {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          }),
          'css-loader',
          'postcss-loader',
        ],
      },
      {
        test: /\.styl(us)?$/,
        use: [
          (env === 'development' ? 'style-loader' : {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          }),
          'css-loader',
          'postcss-loader',
          'stylus-loader',
        ],
      },
      {
        test: /\.less$/,
        use: [
          (env === 'development' ? 'style-loader' : {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          }),
          'css-loader',
          'postcss-loader',
          'less-loader',
        ],
      },
      {
        test: /\.(sa|sc)ss$/,
        use: [
          (env === 'development' ? 'style-loader' : {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          }),
          'css-loader',
          'postcss-loader',
          'sass-loader',
        ],
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'images/[name].[ext]',

        },
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac|m4a)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'media/[name].[ext]',

        },
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'fonts/[name].[ext]',

        },
      },
    ],
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(env),
      'process.env.TARGET': JSON.stringify(target),
    }),

    ...(env === 'production' ? [
      new OptimizeCSSPlugin({
        cssProcessorOptions: {
          safe: true,
          map: { inline: false },
        },
      }),
      new webpack.optimize.ModuleConcatenationPlugin(),
    ] : [
      // Development only plugins
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NamedModulesPlugin(),
    ]),
    new HtmlWebpackPlugin({
      filename: './index.html',
      template: './src/index.html',
      inject: true,
      minify: env === 'production' ? {
        collapseWhitespace: true,
        removeComments: true,
        removeRedundantAttributes: true,
        removeScriptTypeAttributes: true,
        removeStyleLinkTypeAttributes: true,
        useShortDoctype: true
      } : false,
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css',
    }),
    new CopyWebpackPlugin([
      {
        from: resolvePath('src/static'),
        to: resolvePath(isCordova ? 'cordova/www/static' : 'www/static'),
      },
      {
        from: resolvePath('src/manifest.json'),
        to: resolvePath('www/manifest.json'),
      },
    ]),
    ...(!isCordova ? [
      new WorkboxPlugin.InjectManifest({
        swSrc: resolvePath('src/service-worker.js'),
      })
    ] : []),

  ],
};
Hiren Raiyani

经过5天的工作终于可以解决此问题了...

package.json检查以下内容添加浏览器列表(如果未添加),

"browserslist": [
    "Android >= 5",
    "IOS >= 11",
    "Safari >= 11",
    "Chrome >= 49",
    "Firefox >= 31",
    "Samsung >= 5"
  ],

在依赖项上添加core-js

"dependencies": {
    "core-js": "^3.6.4",
    ....
}

check **devdependencies**,
"devDependencies": {
    "@babel/core": "^7.8.7",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/plugin-transform-runtime": "^7.8.3",
    "@babel/preset-env": "^7.8.7",
    "@babel/runtime": "^7.8.7",
    "babel-loader": "^8.0.6",
    ...
}

babel.config.js

module.exports = {
  presets: [
    ['@babel/preset-env', {
      "modules": false,
      "corejs": 3,
      "useBuiltIns": "usage",
      "targets": {
        "browsers": [
          "> 0.5%",
          "last 2 major versions",
          "safari >= 9",
          "not ie <= 11",
          "not dead"
        ]
      }
    }],
  ],
  plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/plugin-syntax-dynamic-import',
  ],
};

module.exports JSON上最重要的webpack.config.js检查以下规则

 module: {
    rules: [
    ....
    {
        test: /\.svelte$/,
        use: [
          'babel-loader',
          {
            loader: 'svelte-loader',
            options: {
              hotReload: false,
              emitCss: true,
            },
          },
        ],
      },
      ....

现在,使用svelte和f7重建您的Cordova应用程序,一切正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android - 创建文件适用于 Android 5 但不适用于 Android 6 或更高版本

来自分类Dev

ES6,ES7(及更高版本),ES2015,stage-0,stage-1(及更高版本)之间是什么关系?

来自分类Dev

使用适用于 android 6 及更高版本的 appcelerator 将数据保存在 SD 卡中

来自分类Dev

适用于iPhone 6和iPhone 6 Plus的应用程序屏幕顶部和底部的1px黑线

来自分类Dev

快速虚拟路径前缀不适用于 angular 6 应用程序

来自分类Dev

流星:应用程序不适用于0.9.1.1版本

来自分类Dev

AlarmManager setInexactRepeating不适用于Android 4.1.2,适用于Android 4.3及更高版本

来自分类Dev

如何在Android 6及更高版本上处理卸载意图?

来自分类Dev

Android 6及更高版本中的SharedPreferences无法更新值

来自分类Dev

如何在Android 6及更高版本上处理卸载意图?

来自分类Dev

执行适用于版本的应用程序。

来自分类Dev

TextView重力不适用于API 18或更高版本

来自分类Dev

jpm run不适用于Firefox 48或更高版本

来自分类Dev

GPO不适用于Windows 7和更高版本

来自分类Dev

适用于多个OS版本的Android Same应用程序捆绑包

来自分类Dev

是否有适用于Android应用程序的Wine版本?

来自分类Dev

以编程方式检查适用于Android的应用程序的最低要求版本并进行升级

来自分类Dev

适用于Ubuntu 14.04和更高版本的Youtube应用?

来自分类Dev

检测iPhone 6及更高版本

来自分类Dev

库版本不兼容:imagick.so需要版本18.0.0或更高版本,但libfreetype.6.dylib在第0行的Unknown中提供版本16.0.0

来自分类Dev

库版本不兼容:imagick.so需要版本18.0.0或更高版本,但libfreetype.6.dylib在行0的“未知”中提供版本16.0.0。

来自分类Dev

适用于4.0和更高版本的Android Tab图标

来自分类Dev

为什么用Embarcadero XE6或更高版本开发的应用程序不能针对XP?

来自分类Dev

泰勒系列的这段代码不适用于 n= 1 或 0 以外的任何值。为什么?

来自分类Dev

IOS 11 及更高版本的 Ionic 1 应用程序中的内容重叠

来自分类Dev

我应该开始在MVC 6 + EF7中编写新应用程序,还是应该在MVC 5 + EF6及更高版本中进行编写?

来自分类Dev

插件不适用于xcode 6

来自分类Dev

CATextLayer foregroundColor 动画不适用于 iOS9 但适用于 iOS10 或更高版本

来自分类Dev

Applescript:应用程序ID仅适用于默认版本

Related 相关文章

  1. 1

    Android - 创建文件适用于 Android 5 但不适用于 Android 6 或更高版本

  2. 2

    ES6,ES7(及更高版本),ES2015,stage-0,stage-1(及更高版本)之间是什么关系?

  3. 3

    使用适用于 android 6 及更高版本的 appcelerator 将数据保存在 SD 卡中

  4. 4

    适用于iPhone 6和iPhone 6 Plus的应用程序屏幕顶部和底部的1px黑线

  5. 5

    快速虚拟路径前缀不适用于 angular 6 应用程序

  6. 6

    流星:应用程序不适用于0.9.1.1版本

  7. 7

    AlarmManager setInexactRepeating不适用于Android 4.1.2,适用于Android 4.3及更高版本

  8. 8

    如何在Android 6及更高版本上处理卸载意图?

  9. 9

    Android 6及更高版本中的SharedPreferences无法更新值

  10. 10

    如何在Android 6及更高版本上处理卸载意图?

  11. 11

    执行适用于版本的应用程序。

  12. 12

    TextView重力不适用于API 18或更高版本

  13. 13

    jpm run不适用于Firefox 48或更高版本

  14. 14

    GPO不适用于Windows 7和更高版本

  15. 15

    适用于多个OS版本的Android Same应用程序捆绑包

  16. 16

    是否有适用于Android应用程序的Wine版本?

  17. 17

    以编程方式检查适用于Android的应用程序的最低要求版本并进行升级

  18. 18

    适用于Ubuntu 14.04和更高版本的Youtube应用?

  19. 19

    检测iPhone 6及更高版本

  20. 20

    库版本不兼容:imagick.so需要版本18.0.0或更高版本,但libfreetype.6.dylib在第0行的Unknown中提供版本16.0.0

  21. 21

    库版本不兼容:imagick.so需要版本18.0.0或更高版本,但libfreetype.6.dylib在行0的“未知”中提供版本16.0.0。

  22. 22

    适用于4.0和更高版本的Android Tab图标

  23. 23

    为什么用Embarcadero XE6或更高版本开发的应用程序不能针对XP?

  24. 24

    泰勒系列的这段代码不适用于 n= 1 或 0 以外的任何值。为什么?

  25. 25

    IOS 11 及更高版本的 Ionic 1 应用程序中的内容重叠

  26. 26

    我应该开始在MVC 6 + EF7中编写新应用程序,还是应该在MVC 5 + EF6及更高版本中进行编写?

  27. 27

    插件不适用于xcode 6

  28. 28

    CATextLayer foregroundColor 动画不适用于 iOS9 但适用于 iOS10 或更高版本

  29. 29

    Applescript:应用程序ID仅适用于默认版本

热门标签

归档