Это мой файл 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.info('before delay');csv("training.csv",function(error,data){train = data});await delay(1000);console.info('after delay')})();
Сначала я пытаюсь загрузить данные в переменную с именем train
. Затем пытаюсь вставить его из файла lib.js
в программу:
import {train} from 'lib';
Но после компиляции появляется следующая ошибка:
TypeScript error: src/dataset.ts(17,21): Error TS2307: Cannot find module 'lib'.
Я что-то упустил в этом процессе.
Он существует во время компиляции, когда создается. Вы можете увидеть это в моем файле package.json
. Дайте мне знать, если у вас возникнут другие вопросы. Пожалуйста, дайте мне знать, что я могу сделать.
куда вы импортируете файл lib.js
Вы видите это в моем вопросе: import {train} from 'lib';
Я понял, что lib.js - это недавно созданный файл. Это не модуль. Следовательно, вы не можете импортировать модули из файла js таким образом.
Попробуйте импортировать {train} из csv; как это определено в csv
Так что вы хоть представляете, что я могу сделать в этом случае, потому что я не понимаю, что я могу сделать, чтобы сначала загрузить csv, а затем следует остальная часть моей программы.
Я пробовал это. Но он вернет пустой массив.
Позвольте нам продолжить обсуждение в чате.
Если вы не измените логику загрузки модуля, вам, вероятно, понадобится относительный путь импорта:
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
? Мне нужно писать только ссылки? Если да, то как я могу это упомянуть, дайте мне знать.
Он должен описывать API модуля, который может быть автоматически сгенерирован компилятором TypeScript, вы должны писать их вручную только для кода, который всегда был JS. Для получения дополнительной информации прочтите документация.
Флаг tsc
для генерации объявлений - --declaration
. Как заставить это работать с вашим конвейером - решать вам.
Убедитесь, что ваш файл lib существует, и вы импортируете его в свой основной файл HTML.