当前位置: 首页 > 知识库问答 >
问题:

用ES6语法和绝对路径导入外部模块

屈俊远
2023-03-14

所以我有一个项目看起来是这样的:

app/
  bin/
  lib/
  src/
    main/
      submodule.ts
    utilities/
      common.ts
    main.ts
    tsconfig.json
  gulpfile.js
import {common} from '/utilities/common';
  • 实用工具/通用
  • /src/Utilities/Common
  • /app/src/utilities/common

这些都没用。../utilities/common的相对路径确实可以工作,但是公共模块的相对路径是维护的噩梦。

值得注意的是,我刚刚从TS 1.5更新到1.6:使用utilities/common已经在1.5中工作过。不过,我在1.6音符中找不到任何关于这方面的突破性改变的提及。

>

  • tsconfig.json

    {
        "compilerOptions": {
            "module": "commonjs",
            "target": "es5",
            "experimentalDecorators": true,
            "emitDecoratorMetadata": true,
            "noEmitOnError": true
        },
        "filesGlob": [
            "./**/*.ts",
            "!./typings/**/*.ts"
        ]
    }

    gulpfile.js

    var gulp = require('gulp');
    var ts   = require('gulp-typescript');
    var less = require('gulp-less');
    var sourcemaps = require('gulp-sourcemaps');
    
    var merge = require('merge2');
    var path  = require('path');
    
    var tsProject = ts.createProject('src/tsconfig.json', { noExternalResolve: true });
    
    gulp.task('html', function () {
        gulp.src([
                'src/**/*.html',
            ])
            .pipe(gulp.dest('bin'));
    });
    
    gulp.task('typescript', function () {
        tsProject.src()
            .pipe(sourcemaps.init())
            .pipe(ts(tsProject))
            .js
            .pipe(sourcemaps.write())
            .pipe(gulp.dest('bin'));
    });
    
    gulp.task('less', function () {
        gulp.src([
                'src/**/*.less',
            ])
            .pipe(sourcemaps.init())
            .pipe(less())
            .pipe(sourcemaps.write())
            .pipe(gulp.dest('bin'))
    });
    
    gulp.task('default', ['html', 'typescript', 'less']);
    
  • 共有1个答案

    邢寒
    2023-03-14

    终于解决了这个。根据最新情况,1.6更改了模块分辨率,使其与节点的行为类似。我还没有研究节点的模块解析,以确定是否可以使用该行为进行修复,但我找到了一个变通方法

    可以通过在tsconfig.json中指定“moduleResolution”:“classic”来触发旧的行为。

     类似资料:
    • 问题内容: 这有效: 但这不是: 我越来越: 是否可以(和/或如何)使用“动态”路径?(不对路径进行硬编码或依靠相对路径)。 问题答案: 不,这是不可能的。ES6模块需要能够静态解析其依赖关系,而无需执行模块代码,以便语句能够可靠地工作。模块说明符必须是字符串文字。 但是,您选择的模块加载器应支持使用变量名动态加载模块。但是,您将无法在模块范围中获得绑定标识符(并且无法重新导出它),通常只能在回调

    • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

    • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根

    • 本文向大家介绍Linux 相对路径和绝对路径的使用,包括了Linux 相对路径和绝对路径的使用的使用技巧和注意事项,需要的朋友参考一下 01. 概述 绝对路径和相对路径在shell环境中经常遇到,各有用处。有时候相对路径比较方便,有时候绝对路径比较方便。 02. 绝对路径(Absolute Pathname) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以

    • 本文向大家介绍相对路径和绝对路径的写法总结,包括了相对路径和绝对路径的写法总结的使用技巧和注意事项,需要的朋友参考一下 在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。 只要在字符串前加上@即可直接使用“\”。所以上面的路径在C#中应该表示为“Book”,@“\Tmp\Book”,@“C:\Tmp\Book”。 相对路径使用“/”字符作为目录

    • 我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构: