Tags:
Node Thumbnail

โครงการ Deno รันไทม์จาวาสคริปต์ ออกเวอร์ชัน 1.28 มีของใหม่ที่สำคัญคือรองรับโมดูล npm ของโครงการ Node.js ตามที่ประกาศไว้ ทำให้เราสามารถอิมพอร์ตโมดูล npm ที่มีมหาศาล 1.3 ล้านโมดูลมาใช้กับ Deno ได้

การใช้งาน npm ของ Deno ไม่จำเป็นต้องสั่ง npm install เพราะโมดูลจะถูกติดตั้งตอนรันโปรแกรมครั้งแรก, ไม่ต้องมีไฟล์ package.json และไม่ต้องมีโฟลเดอร์ node_modules เพราะโมดูลจะถูกแคชในไดเรคทอรี global แทน

ทีมงาน Deno บอกว่าอาจยังมีโมดูล npm บางส่วนที่ยังทำงานเข้ากันไม่ได้ ซึ่งจะทยอยแก้ไขไปเรื่อยๆ แต่โมดูลดังๆ ที่ใช้งานได้แล้วก็อย่างเช่น Prisma, Mongoose, Apollo, React, Vue, Express เป็นต้น

No Description

ที่มา - Deno

Get latest news from Blognone

Comments

By: hisoft
ContributorWindows PhoneWindows
on 17 November 2022 - 12:02 #1269261
hisoft's picture

ลองดูแล้วตัว npm package ยังแตกไฟล์ออกมาอยู่ แต่ด้วยความเป็น global เลยเขียนอะไรลงไปในนั้นไม่ได้ (ก็สมควรแล้ว) อนาคตจะเก็บเป็นแบบไม่แตกไฟล์แบบ Yarn PnP มั้ยนะ

By: rattananen
AndroidWindows
on 17 November 2022 - 13:00 #1269273

ไม่ต้องมี package.json แต่ต้องเอา version ไปใส่ใน source code แทน ดูแล้วไม่ ok
ถ้ามีหลายๆ project ที่ใช้ library เดียวกันในเครื่อง นี้มีปัญหาแน่นอน (package manager ส่วนใหญ่เลยใช้วิธีสร้าง local environment by default)

By: hisoft
ContributorWindows PhoneWindows
on 17 November 2022 - 13:02 #1269278 Reply to:1269273
hisoft's picture

ไม่มี package.json แต่มี import_map.json แทนได้ครับ

ถ้ามีหลายๆ project ที่ใช้ library เดียวกันในเครื่อง นี้มีปัญหาแน่นอน (package manager ส่วนใหญ่เลยใช้วิธีสร้าง local environment by default)

จริงๆ มันก็ไม่ควรมีปัญหามั้ยนะครับถ้ามันเป็นแค่ให้ไปอ่านเฉยๆ 😅
แต่ใช่แหละ ถ้ามันไม่มีปัญหา Yarn PnP นี่น่าจะสบายไม่เจอปัญหาอยู่จนทุกวันนี้ไปแล้ว orz

By: rattananen
AndroidWindows
on 17 November 2022 - 13:29 #1269285 Reply to:1269278

สมมุติไม่มี package.json และมี module webpack5 อยู่ใน global

projectA depend on webpack4 import ปกติไม่เจาะจง version

 const webpack = require('npm:webpack')//v4; 

projectB depend on webpack5 import ปกติไม่เจาะจง version

 const webpack = require('npm:webpack')//v5; 

จาก code Deno จะ resolve แต่ webpack5 module มาให้
ฉะนั้น projectA error แน่นนอน
แต่ projectB ยัง run ได้ปกติ

By: hisoft
ContributorWindows PhoneWindows
on 17 November 2022 - 13:30 #1269288 Reply to:1269285
hisoft's picture

อันนั้นเป็นเพราะไม่เจาะจง version นี่ครับ? ซึ่ง projectA แค่ย้ายไปรันบนเครื่องอื่นก็พังแล้วเพราะจะได้ webpack5 แทน?

By: rattananen
AndroidWindows
on 17 November 2022 - 13:34 #1269289 Reply to:1269288

ไม่ต้องย้ายก็พังได้ครับ ถ้า projectA สร้างตอนยังไม่มี webpack5

By: hisoft
ContributorWindows PhoneWindows
on 17 November 2022 - 13:34 #1269290 Reply to:1269289
hisoft's picture

ใช่ครับ ผมเลยว่าปัญหามันไม่น่าอยู่ที่ไม่มี package.json นี่นา

By: rattananen
AndroidWindows
on 17 November 2022 - 14:27 #1269298 Reply to:1269290

สำหรับผม manifest ของ package manager หน้าที่หลักมันคือใช้บอก dependencies + version เพื่อให้ package manager ไป download, resolve path ได้ถูกต้องครับ
ไม่ว่าจะเป็น package.json, composer.json, vcpkg.json, requirements.txt ก็มีหน้าที่นี้เหมือนกัน

By: hisoft
ContributorWindows PhoneWindows
on 17 November 2022 - 15:24 #1269311 Reply to:1269298
hisoft's picture

ขอบคุณครับ

อันนี้ผมมองว่าไม่ใช่ปัญหาของการไม่มี package.json หรือการเอา npm cache ไปใช้เป็น global แต่เป็นการที่ยอมให้ใช้ import (หรือ import_map.json) ได้โดยที่ version specific เป็น optional มากกว่า

คือใช้ดีๆ แบบระบุ version ได้เลย แต่ด้วยความที่มัน optional เลยใช้แบบ bad practice ได้ (แย่กว่าการลบ lock file ของ npm, yarn ที่โอกาสพังน้อยกว่า)

สุดท้ายผมว่าประเด็นอาจจะไปตกที่มันไม่มี lock file ด้วยครับ คือถึงทำ import_map.json แบบระบุ version แล้วแต่ไม่มี lock file นี่ก็น่าจะพังอยู่ดี T-T