【问题标题】:Not able to import the variable from a compiled library in Javascript Typescript无法从 Javascript Typescript 中的已编译库中导入变量
【发布时间】:2018-12-18 11:32:37
【问题描述】:

这是我的package.json 文件

{
  "name": "deep-playground-prototype",
  "version": "2016.3.10",
  "description": "",
  "private": true,
  "scripts": {
    "clean": "rimraf dist",
    "start": "npm run serve-watch",

    "prep": "browserify src/csv.ts -p [tsify] | uglifyjs -c > csv.js && copyfiles analytics.js dist && concat node_modules/material-design-lite/material.min.js node_modules/seedrandom/seedrandom.min.js csv.js > dist/lib.js",
    "build-css": "copyfiles fonts.css dist && concat node_modules/material-design-lite/material.min.css styles.css > dist/bundle.css",
    "watch-css": "concat node_modules/material-design-lite/material.min.css styles.css -o dist/bundle.css",
    "build-html": "copyfiles index.html dist",
    "watch-html": "concat index.html -o dist/index.html",
    "watch-js": "watchify src/playground.ts -p [tsify] -v --debug -o dist/bundle.js",
    "build-js": "browserify src/playground.ts -p [tsify] | uglifyjs -c > dist/bundle.js",
    "build": "npm run prep && npm run build-js && npm run build-css && npm run build-html",
    "watch": "npm run prep && concurrently \"npm run watch-js\" \"npm run watch-css\" \"npm run watch-html\"",
    "serve": "http-server -o -c-1 dist/",
    "serve-watch": "concurrently \"http-server -o -c-1 dist/\" \"npm run watch\""
  },
  "devDependencies": {
    "@types/d3": "^3.5.41",
    "concat": "^1.0.3",
    "concurrently": "3.1.0",
    "copyfiles": "1.0.0",
    "http-server": "^0.11.1",
    "rimraf": "2.5.4",
    "tsify": "^4.0.0",
    "typescript": "^2.9",
    "uglify-js": "^2.8.29",
    "watchify": "^3.11.0"
  },
  "dependencies": {
    "@types/jquery": "^3.3.27",
    "csv-parse": "^4.2.0",
    "csvtojson": "^2.0.8",
    "d3": "^3.5.16",
    "https-proxy-agent": "^2.2.1",
    "material-design-lite": "^1.3.0",
    "seedrandom": "^2.4.3",
    "typings": "^2.1.1"
  }
}

csv.ts 文件为:

import {csv} from 'd3';
async function delay(ms: number) {
    return new Promise( resolve => setTimeout(resolve, ms) );
}
export let train = [];
(async()=>{console.log('before delay');csv("training.csv",function(error,data){train = data});await delay(1000);console.log('after delay')})();

我首先尝试将数据加载到名为train 的变量中。然后我试图将它从lib.js 文件加载到程序中:

import {train} from 'lib';

但是编译后出现如下错误:

TypeScript 错误:src/dataset.ts(17,21):错误 TS2307:找不到模块“lib”。

我在这个过程中遗漏了一些东西。

【问题讨论】:

  • 检查您的 lib 文件是否存在,并且您正在将它导入到您的主 HTML 文件中
  • 它在编译创建时就存在。你可以在我的package.json 文件中看到这一点。如果您有任何其他疑问,请告诉我。请让我知道我能做什么。
  • 你在哪里导入 lib.js 文件
  • 您在我的问题中看到了这一点:import {train} from 'lib';
  • 我的理解是lib.js是一个新建的文件。它不是一个模块。因此,您不能像这样从 js 文件中导入模块。

标签: javascript typescript d3.js


【解决方案1】:

除非您更改模块加载逻辑,否则您可能需要一个相对导入路径:

import { train } from './lib'; // Assuming same folder, otherwise adjust path

'lib' 如果它是可识别的模块,则可以工作,例如安装到node_modules 的依赖项。

【讨论】:

  • 出现以下错误:Error TS2307: Cannot find module './lib'.
  • 你有编译好的类型声明文件(lib.d.ts)吗?
  • 不,我没有那个。我已经提到它是通过包定义创建的。正如您在我在问题中提到的package.json 中看到的那样。
  • 我不熟悉 browserify 的选项,但它应该是可配置的,你可以让它输出一个。如果您想在 TS 中使用该模块,这将是必要的。
  • 好的,那么我需要在lib.d.ts 中做什么?我只需要写参考吗?如果是,那么我该如何提及它,请告诉我。
猜你喜欢
  • 2023-02-22
  • 2021-09-24
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2021-10-28
  • 2016-04-09
  • 2014-09-09
  • 2020-04-15
相关资源
最近更新 更多