2016-01-07 19 views
9

Tôi có một gói (babel-preset-es2015-webpack) với sự phụ thuộc babel-preset-es2015. babel-preset-es2015 có sự phụ thuộc babel-plugin-transform-es2015-modules-commonjs.Làm thế nào để có được sự phụ thuộc của một phụ thuộc khác?

Làm cách nào để yêu cầu babel-plugin-transform-es2015-modules-commonjs theo cách đảm bảo rằng gói đó giống với gói mà phụ thuộc babel-present-es2015 của tôi đang sử dụng?

Đơn giản chỉ cần thực hiện:

require('babel-plugin-transform-es2015-modules-commonjs'); 

Sẽ làm việc trong thiết lập NPM3 (giả sử không có phụ thuộc khác mà đòi hỏi một phiên bản khác của babel-plugin-transform-es2015-modules-commonjs), nhưng sẽ không làm việc trong NPM2.

Trả lời

1

Nếu bạn không muốn sử dụng shrinkwrap như ghi nhận của @Nocturno, bạn cũng có thể chỉ đơn giản là yêu cầu con đường cụ thể cho các phụ thuộc:

require('<path-to-node_modules>/babel-preset-es2015-webpack/node_modules/babel-plugin-transform-es2015-modules-commonjs'); 

Không bao giờ sử dụng các plugin bản thân mình, nhưng một cái gì đó giống như trên nên làm việc .

Một tùy chọn khác là khóa babel-preset-es2015-webpack thành phiên bản cụ thể, sau đó xác định phiên bản babel-plugin-transform-es2015-modules-commonjs nào được liệt kê trong package.json của nó và thêm nó vào package.json của bạn. Sau đó, bạn có thể sử dụng phương thức require('babel-plugin-transform-es2015-modules-commonjs'); trong NPM2 và NPM3.

+0

Điều này sẽ chỉ hoạt động trong NPM 2. – Gajus

+0

Xem câu trả lời đã chỉnh sửa của tôi ở trên, tôi thực sự không thể nghĩ ra một cách khác để làm điều đó một cách không may. – wjohnsto

+0

Mẹo: Sử dụng 'require.resolve' để lấy đường dẫn của' '. Sau đó, viết một iterator mà attmpts để giải quyết '/node_modules/', sau đó (nếu '' không được giải quyết), tiến tới ' /../ node_modules/ ',' /../../ node_modules/ '. Điều này sẽ làm việc trong npm v2 và npm v3. Cho bạn câu trả lời. Chỉ cần đặt nó vào mã. :) – Gajus

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