【问题标题】:Prevent "use strict" in typescript?防止打字稿中的“使用严格”?
【发布时间】:2022-05-07 07:06:44
【问题描述】:

尝试在 iOS 设备上加载我的应用时出现以下错误;

VMundefined bundle.js:1722 SyntaxError: Unexpected keyword 'const'. Const declarations are not supported in strict mode.

这个错误发生在 iPhone 5s/6s + 我试过的几个不同的 iPad 上(不记得是哪个)。它也不适用于 HTC 之一。我尝试过的任何三星/Windows 手机都没有出现此错误。它也适用于台式机。 (我还没有尝试在 Mac 上运行它)。

这是 bundle.js 中的那行代码;

{}],12:[function(require,module,exports){
"use strict";
const guage_1 = require("./charts/kpi/guage");
const stacked_1 = require("./charts/area/stacked");
const barChart_1 = require("./charts/compare/barChart");

当我从 bundle.js 中删除“use strict”时,它在所有设备上都可以正常工作。只是想知道是否有办法确保 typescript 不使用“use strict”编译或修复 iOS 设备的问题?

这是我用于编译的 gulpfile(按照 typescripts website 上发布的指南进行操作)

var gulp = require('gulp'),
    sourcemaps = require('gulp-sourcemaps'),
    source = require('vinyl-source-stream'),
    tsify = require('tsify'),
    browserSync = require('browser-sync'),
    postcss = require('gulp-postcss'),
    uglify = require('gulp-uglify'),
    concat = require('gulp-concat'),
    rename = require('gulp-rename'),
    watchify = require("watchify"),
    browserify = require('browserify'),
    gutil = require("gulp-util"),
    buffer = require('vinyl-buffer'),
    processorArray = [
       ...
    ],
    watchedBrowserify = watchify(browserify({
        basedir: '.',
        debug: true,
        entries: ['src/main.ts'],
        cache: {},
        packageCache: {}
    }).plugin(tsify)),
    devPlugin = './src/plugins/';

function bundle() {
    return watchedBrowserify
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(gulp.dest("dist"));
}

gulp.task('default', ['styles',  'browser-sync', 'watch'], bundle, function() {

    return browserify({
            basedir: '.',
            debug: true,
            entries: ['src/main.ts'],
            cache: {},
            packageCache: {}
        })
        .plugin(tsify)
        .transform("babelify")
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(buffer())
        .pipe(sourcemaps.init({
            loadMaps: true
        }))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest('dist'))


});

watchedBrowserify.on("update", bundle);
watchedBrowserify.on("log", gutil.log);

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以通过使用--noImplicitUseStrict compiler option 进行编译来做到这一点——在tsconfig.json 中将"noImplicitUseStrict": true 添加到"compilerOptions"

    这样做会阻止编译器发出"use strict"

    【讨论】:

    • 我注意到,如果我们在命名空间中声明我们的类,则不会出现“use strict”。所以最好在命名空间中声明类。
    【解决方案2】:

    现在防止编译器发出“use strict”的选项名称被命名为“alwaysStrict”

    【讨论】:

    • 您的答案可以通过澄清 OP 可以在哪里提供 alwaysStrict 选项来改进。
    猜你喜欢
    • 2017-12-13
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多