How to package a local npm module? - npm

I am trying to pack an npm package and install it on my webapp.
My application has the following structure:
app
app.ts
app.css
build
app.js
app.css
package.json
tsconfig.json
.npmignore
I started with the pack command documentation.
I added the .npmignore to include only the build folder.
As expected when running npm pack, I know have a new app-1.0.0.tgz
When I try to install it in the web app with npm install ..\typescriptapp\typescriptapp-1.0.0
I get the following error:
npm ERR! code ENOLOCAL
npm ERR! Could not install from
"..\typescriptapp-1.0.0" as it does not contain a
package.json file.
npm ERR! A complete log of this run can be found in: npm ERR!
C:\Users\corbin\AppData\Roaming\npm-cache_logs\2018-03-26T17_49_30_440Z-debug.log
However when I unzip the typescriptapp.tgz, I have the following structure
typecriptapp-1.0.0
typecriptapp-1.0.0
package
build
app.js
app.css
package.json
tsconfig.json
Here is my package.json file:
{
"name": "typescriptapp",
"version": "1.0.0",
"scripts": {
"build": "tsc",
"debug": "tsc -w"
},
"devDependencies": {
"#types/signalr": "2.2.35",
"uglify-js": "3.3.16",
"uglifycss": "0.0.28"
},
"dependencies": {
"#aspnet/signalr": "^1.0.0-preview1-update1",
"lib": "file:../references/lib"
}
}
What am I doing wrong?

You are trying to run install in the parent folder
npm install ..\typescriptapp\typescriptapp-1.0.0
Whereas you have to install it in
npm install ..\typescriptapp\typescriptapp-1.0.0\typescriptapp-1.0.0\package

Related

Cypress Github Actions showing peer dependency conflict errors

I'm trying to set up a workflow to run automated cypress tests in GitHub Actions but continue to run into this error message
npm ERR! While resolving: cypress-plugin-snapshots#1.4.4
npm ERR! Found: cypress#8.4.1
npm ERR! node_modules/cypress
npm ERR! dev cypress#"^8.4.1" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer cypress#"^4.5.0" from cypress-plugin-snapshots#1.4.4
npm ERR! node_modules/cypress-plugin-snapshots
npm ERR! dev cypress-plugin-snapshots#"1.4.4" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: cypress#4.12.1
npm ERR! node_modules/cypress
npm ERR! peer cypress#"^4.5.0" from cypress-plugin-snapshots#1.4.4
npm ERR! node_modules/cypress-plugin-snapshots
npm ERR! dev cypress-plugin-snapshots#"1.4.4" from the root project
I don't have permission to embed images, but here's a screenshot of the entire error message
Relevant section of the YAML workflow:
jobs:
cypress-run:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout#v3
- name: Cypress Run
uses: cypress-io/github-action#v4
with:
build: npm run build
start: npm start
spec: cypress/integration/example.js
package.json:
{
"name": "cypressautomations",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"cypress:open": "cypress open",
"cypress:debug": "cross-env CYPRESS_REMOTE_DEBUGGING_PORT=9222 cypress open",
"delete-mochawesome-folder": "rm -f mochawesome-report/*.json",
"e2e_mochawesome": "yarn cypress run --spec cypress/integration/Tests/*.js",
"merge-json": "npx mochawesome-merge --reportDir mochawesome-report > mochawesome1.json",
"html-generator": " npx mochawesome-report-generator mochawesome1.json"
},
"author": "",
"license": "ISC",
"devDependencies": {
"#cypress/snapshot": "2.1.7",
"cross-env": "7.0.3",
"cypress": "^8.4.1",
"cypress-fail-on-console-error": "2.0.6",
"cypress-multi-reporters": "1.4.0",
"cypress-plugin-snapshots": "1.4.4",
"cypress-wait-until": "1.7.1",
"eslint": "7.26.0"
},
"dependencies": {
"#azure/cosmos": "3.10.5",
"bson-ext": "4.0.1",
"dotenv": "8.2.0",
"kerberos": "1.1.7",
"lodash": "4.17.21",
"mocha-junit-reporter": "2.0.0",
"mochawesome": "6.2.2",
"mochawesome-merge": "4.2.0",
"mochawesome-report-generator": "5.2.0",
"mongodb": "4.1.2",
"mongodb-client-encryption": "1.2.7"
},
"peerDependencies": {
"mocha": "3.1.2"
}
}
I tried doing a run with the --legacy-peer-deps flag by adding the following code after the "Checkout" step
- name: Install Dependencies
run: npm ci --legacy-peer-deps
but the error persists. It looks like the 'Cypress Run' action runs the 'npm ci' command as part of its own workflow, even if dependencies are already installed.
Any insight into this problem would be greatly appreciated.
I was running into the same issue and figured the same thing with the Cypress Run command. It's doing the npm installation for you.
I fixed this by separating the installation from the action and build, as well as setting the action installation as false:
steps:
- name: Checkout
uses: actions/checkout#v2
# Install NPM dependencies, cache them correctly
# and run all Cypress tests
- name: Cypress install
run: npm install --legacy-peer-deps
- name: Cypress run
uses: cypress-io/github-action#v2
with:
install: false
build: npm run build
start: npm start
run: npm run dev
Cypress is now running my E2E tests.

Failure to install node modules within react native app in a mono repo using pnpm

i'm attempting to run a react native app in a monorepo using pnpm. I added it to pnpm-workspace.yaml file defined as:
packages:
- "apps/*"
When i attempt to run npm i or pnpm i i kept getting the error below:
> sample_project#0.0.1 prepare
> cd .. && husky install frontend/.husky
line 2: husky: command not found
I have husky defined in the root folder(within pnpm-workspace.yaml). Also i declared a .npmrc file that included node-linker=hoisted but still no luck. I also ran pnpm i within the root directory but failed to install node_modules dir within the mobile directory. Please help needed. How does one run a react native app within a monorepo with pnpm? Any help will be appreciated.
Edit
I have husky defined in the root directory as:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
cd frontend
pnpm run pre-commit
and in my package.json file:
{
"name": "sample_project",
"version": "0.0.1",
"private": true,
"workspaces": [
"apps/*",
"packages/*"
],
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev --parallel",
"test": "turbo run test",
"test:lint": "turbo run test:lint",
"fix": "turbo run fix",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"prepare": "cd .. && husky install frontend/.husky",
"pre-commit": "turbo run fix"
},
"devDependencies": {
"prettier": "latest",
"turbo": "latest",
"husky": "latest",
"lint-staged": "latest"
},
"engines": {
"npm": ">=7.0.0",
"node": ">=14.0.0"
},
"packageManager": "pnpm#7.0.1"
}
When i run the command npm i --loglevel verbose within the mobile directory below is the following errors:
> sample_project#0.0.1 prepare
> cd .. && husky install frontend/.husky
/var/folders/r5/n6lp6wsj2c52h51xxsdgw7y00000gn/T/prepare6589946269.sh: line 2: husky: command not found
npm timing command:i Completed in 54463ms
npm verb stack Error: command failed
npm verb stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/#npmcli/promise-spawn/lib/index.js:63:27)
npm verb stack at ChildProcess.emit (node:events:513:28)
npm verb stack at maybeClose (node:internal/child_process:1091:16)
npm verb stack at ChildProcess._handle.onexit (node:internal/child_process:302:5)
npm verb pkgid ***#0.0.1
npm verb cwd /Users/***/***/***/***/***/****
npm verb Darwin 21.5.0
npm verb node v18.6.0
npm verb npm v8.13.2
npm ERR! code 127
npm ERR! path /Users/***/***/***/***
npm ERR! command failed
npm ERR! command sh -c /var/folders/r5/n6lp6wsj2c52h51xxsdgw7y00000gn/T/prepare6589946269.sh
npm verb exit 127
npm timing npm Completed in 54564ms
npm verb code 127

How to publish my npm package in GitLab NPM Registry?

I hooked up a trial gold plan to test GitLab NPM Registry functionality.
Created a gitlab prohect with the name "bar".
Created a file to generate a token: in the file with the name auth.txt I wrote the line:
grant_type=password&username=my-gitlab-username& password=my-gitlab-password
Generated a token using the command:
curl -d "# auth.txt" -X POST http:/gitlab.com/oauth/token
In the .npmrc file, the path was indicated
gitlab.com/api/v4/projects/my-gitlab-project-id/packages/npm/:_ authToken=my-genereated-token
Created an app.js file for testing, with the contents: console.log('test')
Created a json package with content
{
"name": "#foo/bar",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"express": "^4.16.4"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC",
"publishConfig": {
"registry":"http://gitlab.com/api/v4/projects/my-gitlab-project-id/packages/npm/"
}
}
6.In the folder now there are 3 files:
.npmrc
app.js
package.json
I start publishing the package to the repository with the command
npm --verbose publish
It is not published! writes:
npm verb cli [ '/usr/bin/node', '/usr/local/bin/npm', '--verbose', 'publish' ]
npm info using npm#6.14.2
npm info using node#v13.11.0
npm verb npm-session febf284b8dfbe40b
npm verb publish [ '.' ]
npm info lifecycle #foo/bar#1.0.0~prepublish: #foo/bar#1.0.0
npm info lifecycle #foo/bar#1.0.0~prepare: #foo/bar#1.0.0
npm info lifecycle #foo/bar#1.0.0~prepublishOnly: #foo/bar#1.0.0
npm info lifecycle #foo/bar#1.0.0~prepack: #foo/bar#1.0.0
npm info lifecycle #foo/bar#1.0.0~postpack: #foo/bar#1.0.0
npm notice
npm notice 📦 #foo/bar#1.0.0
npm notice === Tarball Contents ===
npm notice 687B logs
npm notice 175B app.js
npm notice 404B package.json
npm notice 582B README.md
npm notice 55B auth.loc.txt
npm notice 59B auth.txt
npm notice === Tarball Details ===
npm notice name: #foo/bar
npm notice version: 1.0.0
npm notice package size: 1.1 kB
npm notice unpacked size: 2.0 kB
npm notice shasum: c4220955014b80c6948ff2a20124ac8d145d0675
npm notice integrity: sha512-pOQJVaXuneH80[...]DdtCjSLD1vkDQ==
npm notice total files: 6
npm notice
npm http fetch PUT 301 http://gitlab.com/api/v4/projects/my-gitlab-project-id/packages/npm/#foo%2fbar 283ms
npm info lifecycle #foo/bar#1.0.0~publish: #foo/bar#1.0.0
npm info lifecycle #foo/bar#1.0.0~postpublish: #foo/bar#1.0.0
#foo/bar#1.0.0
npm verb exit [ 0, true ]
npm timing npm Completed in 555ms
npm info ok
But in the GitLab in the list on the left - in Packages > List not a single package is displayed, either in the All section or in the NPM section.
Please help me figure out what I'm doing wrong.
You can try to specify the package registry for the exact project.
.npmrc file example:
# Set URL for your scoped packages.
#foo:registry=https://gitlab.com/api/v4/projects/<Source Project ID>/packages/npm/
# Add the token for the scoped packages URL. This will allow you to download
//gitlab.com/api/v4/projects/<Source Project ID>/packages/npm/:_authToken=${CI_JOB_TOKEN}
# with the project you want your package to be uploaded to.
//gitlab.com/api/v4/projects/<Destination Project ID>/packages/npm/:_authToken=${CI_JOB_TOKEN}

npm run build - Insufficient number of arguments or no entry found

I am trying to build a project for the first time and I am getting an error message.
Insufficient number of arguments or no entry found.
Alternatively, run 'webpack(-cli) --help' for usage info.
Hash: 83fdf40d8aadb2841816
Version: webpack 4.18.0
Time: 180ms
Built at: 09/11/2018 4:55:53 AM
ERROR in Entry module not found: Error: Can't resolve './src' in '/home/baudhi/website'
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! website#15.19.1 build: `webpack --mode production`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the website#15.19.1 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/baudhi/.npm/_logs/2018-09-11T11_55_53_650Z-debug.log
The ebook I am reading has asked me to type 'npm run build' but it is not working. any help pls.
My package.json file looks like the following:
{
"name": "website",
"version": "15.19.1",
"description": "just practice",
"main": "main.js",
"scripts": {
"develop": "webpack --mode development --watch",
"build": "webpack --mode production"
},
"author": "pebaudhi",
"license": "ISC",
"devDependencies": {
"webpack": "^4.18.0",
"webpack-cli": "^3.1.0"
},
"dependencies": {
"jquery": "^3.3.1"
}
}
And my directory structure is:
/usr/baudhi/website/.babelrc
/usr/baudhi/website/package.json
/usr/baudhi/website/jquery-3.3.1.js
/usr/baudhi/website/src/main.js
/usr/baudhi/website/dist/main.js
node -v
v10.7.0
Thank you very much for helping me.
If you're using Webpack 4 the configuration has been defaulted. Hence, you don't need to provide a webpack.config.json file but you're project needs to follow the default config.
The default entry point in Webpack 4 is ./src/index.js. So either rename ./src/main.js or create webpack.config.js file with the following minimum.
module.exports = {
entry: './src/main.js'
};

npm install fails with multi-layered local dependencies

npm install doesn't seem to work if I depend on a local package that itself depends on another local package. I'm using npm version 2.5.1.
Here's what I have:
package.json for /src/modules/moduleA:
{
"name": "moduleA",
"version": "0.0.1",
...
"dependencies": {
"bluebird": "^2.9.1",
"nodemailer": "^1.3.0"
}
}
package.json for /src/modules/moduleB:
{
"name": "moduleB",
"version": "1.0.0",
...
"dependencies": {
"nconf": "~0.6.7",
"moduleA": "../moduleA"
}
}
package.json for /src/apps/coolApp:
{
"name": "coolApp",
"version": "1.0.0",
...
"dependencies": {
"mysql": "~2.4.2",
"request": "~2.40.0",
"cheerio": "~0.17.0",
"async": "~0.9.0",
"expand-url": "0.1.3",
"moduleB": "../../modules/moduleB"
}
}
Now if I try to npm install :
cd /src/modules/moduleA
npm install
[success, yay!]
cd /src/modules/moduleB
npm install
[success, yay!]
cd /src/apps/coolApp
npm install
npm ERR! addLocal Could not install /src/node/apps/moduleA
npm ERR! enoent ENOENT, open '/src/node/apps/moduleA'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
[oh no!]
For some reason, npm is trying to install moduleA for coolApp, even though it doesn't need to directly, and also, it is using the relative path string as it is literally specified in the package.json file for moduleB, even though that isn't valid for coolApp since it is in a relatively different location.
I found that if you specify the local modules with "file:" before the path, everything works fine. Yay
Like this:
"moduleB": "file:../../modules/moduleB"