nsbp-cli 0.2.20 → 0.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/nsbp.js +29 -11
- package/package.json +2 -2
- package/templates/basic/Dockerfile +1 -1
- package/templates/basic/Dockerfile.dev +1 -1
- package/templates/basic/Makefile +1 -1
- package/templates/basic/README.md +3 -3
- package/templates/basic/docker-compose.dev.yml +1 -1
- package/templates/basic/package.json +2 -1
- package/templates/basic/public/images/test/0.jpg +0 -0
- package/templates/basic/public/images/test/1.jpg +0 -0
- package/templates/basic/public/images/test/2.jpg +0 -0
- package/templates/basic/public/images/test/3.jpg +0 -0
- package/templates/basic/public/images/test/4.jpg +0 -0
- package/templates/basic/public/images/test/5.jpg +0 -0
- package/templates/basic/src/component/Layout.tsx +1 -1
- package/templates/basic/src/containers/Home.tsx +1 -1
- package/templates/basic/src/containers/Photo.tsx +2 -2
- package/templates/basic/src/reducers/home.ts +1 -6
- package/templates/basic/src/utils/fetch.ts +1 -1
package/README.md
CHANGED
|
@@ -147,7 +147,7 @@ node ./bin/nsbp.js --help # Test CLI locally
|
|
|
147
147
|
|
|
148
148
|
- **Package Name**: `nsbp-cli`
|
|
149
149
|
- **Bin Command**: `nsbp` (install globally and run `nsbp --help`)
|
|
150
|
-
- **Version**: `0.2.
|
|
150
|
+
- **Version**: `0.2.23`
|
|
151
151
|
- **Dependencies**: chalk, commander, fs-extra, inquirer
|
|
152
152
|
- **Package Manager**: Uses pnpm (also compatible with npm)
|
|
153
153
|
- **Node Version**: >=16.0.0
|
package/bin/nsbp.js
CHANGED
|
@@ -21,7 +21,7 @@ program
|
|
|
21
21
|
.command('create <project-name>')
|
|
22
22
|
.description('Create a new NSBP project')
|
|
23
23
|
.option('-t, --template <template>', 'Specify template (basic, blog, ecommerce)', 'basic')
|
|
24
|
-
.option('--skip-install', 'Skip
|
|
24
|
+
.option('--skip-install', 'Skip pnpm install')
|
|
25
25
|
.action(async (projectName, options) => {
|
|
26
26
|
console.log(chalk.cyan(`🚀 Creating NSBP project: ${projectName}`));
|
|
27
27
|
|
|
@@ -104,15 +104,10 @@ program
|
|
|
104
104
|
// Create package.json for new project
|
|
105
105
|
const originalPackage = require(path.join(templateSource, 'package.json'));
|
|
106
106
|
const newPackage = {
|
|
107
|
+
...originalPackage,
|
|
107
108
|
name: projectName,
|
|
108
109
|
version: '1.0.0',
|
|
109
|
-
description: `NSBP project: ${projectName}
|
|
110
|
-
scripts: originalPackage.scripts,
|
|
111
|
-
dependencies: originalPackage.dependencies,
|
|
112
|
-
devDependencies: originalPackage.devDependencies,
|
|
113
|
-
keywords: originalPackage.keywords,
|
|
114
|
-
author: originalPackage.author,
|
|
115
|
-
license: originalPackage.license
|
|
110
|
+
description: `NSBP project: ${projectName}`
|
|
116
111
|
};
|
|
117
112
|
|
|
118
113
|
fs.writeFileSync(
|
|
@@ -120,20 +115,43 @@ program
|
|
|
120
115
|
JSON.stringify(newPackage, null, 2)
|
|
121
116
|
);
|
|
122
117
|
|
|
118
|
+
// Remove package-lock.json if exists (use pnpm instead)
|
|
119
|
+
const packageLockPath = path.join(targetDir, 'package-lock.json');
|
|
120
|
+
if (fs.existsSync(packageLockPath)) {
|
|
121
|
+
fs.removeSync(packageLockPath);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Create .npmignore to prevent package-lock.json from being committed
|
|
125
|
+
const npmignorePath = path.join(targetDir, '.npmignore');
|
|
126
|
+
if (!fs.existsSync(npmignorePath)) {
|
|
127
|
+
fs.writeFileSync(npmignorePath, 'package-lock.json\n');
|
|
128
|
+
}
|
|
129
|
+
|
|
123
130
|
// Optionally install dependencies
|
|
124
131
|
if (!options.skipInstall) {
|
|
132
|
+
// Check if pnpm is available
|
|
133
|
+
try {
|
|
134
|
+
execSync('which pnpm', { stdio: 'ignore' });
|
|
135
|
+
} catch {
|
|
136
|
+
console.error(chalk.red('❌ pnpm is not installed or not available in PATH.'));
|
|
137
|
+
console.error(chalk.yellow('Please install pnpm before continuing:'));
|
|
138
|
+
console.error(chalk.cyan(' npm install -g pnpm'));
|
|
139
|
+
console.error(chalk.yellow('Or use --skip-install flag to skip dependency installation.'));
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
|
|
125
143
|
console.log(chalk.cyan('📦 Installing dependencies...'));
|
|
126
144
|
process.chdir(targetDir);
|
|
127
|
-
execSync('
|
|
145
|
+
execSync('pnpm install', { stdio: 'inherit' });
|
|
128
146
|
}
|
|
129
147
|
|
|
130
148
|
console.log(chalk.green(`✅ NSBP project "${projectName}" created successfully!`));
|
|
131
149
|
console.log(chalk.yellow('\nNext steps:'));
|
|
132
150
|
console.log(` cd ${projectName}`);
|
|
133
151
|
if (options.skipInstall) {
|
|
134
|
-
console.log('
|
|
152
|
+
console.log(' pnpm install');
|
|
135
153
|
}
|
|
136
|
-
console.log('
|
|
154
|
+
console.log(' pnpm run dev');
|
|
137
155
|
console.log(chalk.cyan('\nHappy coding! 🎉'));
|
|
138
156
|
|
|
139
157
|
} catch (error) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nsbp-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.23",
|
|
4
4
|
"description": "CLI tool for creating NSBP (Node React SSR by Webpack) projects",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"homepage": "https://nsbp.erishen.cn/",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"start": "node ./bin/nsbp.js",
|
|
18
18
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
19
19
|
"sync-template": "node ./scripts/sync-template.js",
|
|
20
|
-
"update": "
|
|
20
|
+
"update": "pnpm run sync-template",
|
|
21
21
|
"update-changelog": "node ./scripts/update-changelog.js",
|
|
22
22
|
"changelog": "npx conventional-changelog -p angular -i CHANGELOG.md -s"
|
|
23
23
|
},
|
package/templates/basic/Makefile
CHANGED
|
@@ -23,7 +23,7 @@ services:
|
|
|
23
23
|
- node_modules:/app/node_modules
|
|
24
24
|
# Build output - named volume for persistence
|
|
25
25
|
- build_output:/app/build
|
|
26
|
-
command: ["dumb-init", "--", "
|
|
26
|
+
command: ["dumb-init", "--", "pnpm", "run", "dev"]
|
|
27
27
|
restart: unless-stopped
|
|
28
28
|
networks:
|
|
29
29
|
- nsbp-network
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"dev:build:server": "webpack --config webpack.server.js --mode development --watch",
|
|
11
11
|
"dev:build:client": "webpack --config webpack.client.js --mode development --watch",
|
|
12
12
|
"dev:build:start": "node ./scripts/start.js",
|
|
13
|
-
"build": "
|
|
13
|
+
"build": "pnpm run clean && npm-run-all -l -p build:**",
|
|
14
14
|
"build:server": "webpack --config webpack.server.js --mode production",
|
|
15
15
|
"build:client": "webpack --config webpack.client.js --mode production",
|
|
16
16
|
"start": "node ./scripts/start.js",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"author": "Erishen Sun",
|
|
31
31
|
"license": "ISC",
|
|
32
|
+
"packageManager": "pnpm@10.27.0",
|
|
32
33
|
"dependencies": {
|
|
33
34
|
"@loadable/component": "^5.15.0",
|
|
34
35
|
"@loadable/server": "^5.15.0",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -369,7 +369,7 @@ export const getPhotoMenu = (req: any, res: any) => {
|
|
|
369
369
|
|
|
370
370
|
<QuickStartCard>
|
|
371
371
|
<QuickStartTitle>2️⃣ 启动开发</QuickStartTitle>
|
|
372
|
-
<QuickStartCode>$
|
|
372
|
+
<QuickStartCode>$ pnpm run dev</QuickStartCode>
|
|
373
373
|
<QuickStartDescription>
|
|
374
374
|
启动开发服务器,默认端口 3001
|
|
375
375
|
</QuickStartDescription>
|
|
@@ -73,7 +73,7 @@ const Photo = ({ query, data, menu, getPhotoMenu }: any) => {
|
|
|
73
73
|
if (!isSEO()) {
|
|
74
74
|
doGetPhotoMenu()
|
|
75
75
|
} else {
|
|
76
|
-
if(from === 'link'){
|
|
76
|
+
if (from === 'link') {
|
|
77
77
|
doGetPhotoMenu()
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -154,7 +154,7 @@ const mapStateToProps = (state: any) => {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
const mapDispatchToProps = (dispatch: any) => ({
|
|
157
|
-
getPhotoMenu(dic:any) {
|
|
157
|
+
getPhotoMenu: (dic: any) => {
|
|
158
158
|
dispatch(loadData(null, dic))
|
|
159
159
|
}
|
|
160
160
|
})
|
|
@@ -2,15 +2,10 @@ import { GITHUB_ZEITNEXT_GET } from '../store/constants'
|
|
|
2
2
|
|
|
3
3
|
export const homeReducer = (state = { data: {} }, action: any) => {
|
|
4
4
|
const { type, data } = action
|
|
5
|
-
let newState = null
|
|
6
5
|
|
|
7
6
|
switch (type) {
|
|
8
7
|
case GITHUB_ZEITNEXT_GET:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (data) newState.data = data
|
|
12
|
-
|
|
13
|
-
return newState
|
|
8
|
+
return { ...state, data: data !== undefined ? data : state.data }
|
|
14
9
|
default:
|
|
15
10
|
return state
|
|
16
11
|
}
|