2013-04-19 32 views
5

Tôi nghĩ sẽ rất tuyệt khi nhập trực tiếp các mô-đun từ thư mục node_modules mà không cần phải cung cấp một tệp khai báo theo cách thủ công cho nó (chúng ta giả định rằng khai báo được cung cấp với chính mô-đun đó). Tôi đoán rằng vấn đề là phụ thuộc đi kèm với khai báo (đường dẫn tập tin có thể được giải quyết liên quan đến các mô-đun, nhưng điều đó sẽ gây ra bản sao và trình biên dịch không thể xử lý đó). Hiện tại làm việc với các mô-đun nút là rất bất tiện vì cài đặt đơn giản từ kho npm không đủ và chúng tôi phải tự tìm kiếm các khai báo và cung cấp chúng trong dự án của chúng tôi. Giả sử dự án của chúng ta phụ thuộc vào 10 module nút (tất cả chúng đều có khai báo) và sau một năm chúng ta muốn cập nhật chúng. Chúng ta sẽ phải tự tìm kiếm các khai báo mới và giả sử rằng chúng ta có khoảng 20 dự án như thế này (nó sẽ trở thành một cơn ác mộng). Có lẽ nên có một tùy chọn để nhập trực tiếp tệp .ts từ mô-đun nút?Nhập Node.js npm modules (node_modules) & khai báo trong TypeScript

Bạn có bất cứ đề xuất nào không?

Đây là một tái bài từ CodePlex để nghe ý kiến ​​của bạn ...

+0

Một liên kết đến chuỗi mã hóa sẽ đẹp. PS: Không thực sự có được những gì bạn đang yêu cầu một giải pháp cho đây – basarat

+0

Đây là một liên kết đến các chủ đề CodePlex ... https://typescript.codeplex.com/discussions/440670 – jzvelc

Trả lời

1

Tôi không nghĩ rằng các module nút bao giờ sẽ chứa built-in hỗ trợ nguyên cảo. Ngôn ngữ vẫn là bản phát hành 0.x và được mô tả chính thức dưới dạng phiên bản alpha.

Tuy nhiên, có nhiều cách để giảm bớt quá trình định cấu hình cho bản in. Github đã có chứa bộ sưu tập khổng lồ các file .d.ts như:

https://github.com/borisyankov/DefinitelyTyped hoặc https://github.com/soywiz/typescript-node-definitions

Bạn có thể muốn có một cái nhìn tại công cụ này: https://github.com/Diullei/tsd. Tôi chưa bao giờ sử dụng nó nhưng nó có vẻ như nó gần như những gì bạn đang tìm kiếm.

Hơn nữa, tôi đã nghe nói rằng cơ sở dữ liệu chính thức của các tệp .d.ts được lên kế hoạch. Rất tiếc, tôi không thể tìm thấy liên kết nhưng có thể sẽ mất một khoảng thời gian trước khi được triển khai.

+0

TSD là tìm kiếm tốt đẹp và có thể chỉ là những gì chúng ta cần ... Bằng cách nào đó nó sẽ là gread nó khai báo có thể được giải quyết từ thư mục node_modules. – jzvelc

2

Nếu bạn sử dụng grunt-typescript sau đó tôi đã có một yêu cầu kéo mà giải quyết điều này ít nhất là cho tôi. Xem https://github.com/k-maru/grunt-typescript/pull/36

Từ yêu cầu kéo README

Làm việc với các module trong node_modules (tức là NPM)

Cách thông thường để sử dụng các gói NPM là để cung cấp một tập tin định nghĩa chỉ định gói đến nguyên cảo và nhập mô-đun từ đó.

///<reference path="path/to/mod.d.ts" /> 
import mod = module('mod') 

Trình biên dịch bản ghi sẽ chuyển đổi import thành nút node require.

var mod = require('mod') 

này là khá khó sử dụng khi bạn cần phải biết đường dẫn chính xác để các cài đặt gói NPM và NPM có thể đặt gói tại khá nhiều bất kỳ cấp độ khi bạn đang làm việc với nhiều cấp độ phụ thuộc.

Với node_modules tùy chọn trong grunt cấu hình bạn có thể chỉ import một gói NPM mà không cần phải biết mức độ chính xác nơi mà các gói đã được cài đặt bởi NPM miễn là nó được cài đặt tại địa phương và không toàn cầu.

Để import một module NPM trong nguồn nguyên cảo của bạn làm

import npmModule = module('node_modules/npmModule/foo') 

Chủ yếu là do một cơ hội may mắn làm việc này. Trình biên dịch Typescript sẽ đọc tệp định nghĩa bản ghi node_modules/npmModule/foo.d.ts nếu nó có mặt tại một số điểm trên đường về phía gốc và tệp kết quả javascript sẽ chứa require cho npmModule/foo nếu cần.

Các vấn đề liên quan